[英]Convert an array of object to array of string?
我有這樣的對象數組-
var person = [
{name: 'saprsh', age: 22, address:'XYZ'},
{name: 'Ankur', age: 23},
{name: 'Richa', age:25, adddress:'ABX', email:'abc@xyz.co'}
];
現在我想要這樣的輸出
var string_person = [{sparsh22XYZ},{ankur23},{Richa25ABXabc@xyz.co}];
是他們在javascript,jquery,Angular.js中獲取此類輸出的任何方式。
批准使用任何其他網絡使用的語言。
看看這個jsfiddle 。 您將看到同時使用了Array.prototype.reduce
和Array.prototype.map
,兩者的結果相同。
這是經典的reduce
:
var people = person.reduce(function(agg, p) {
return agg.concat([p.name + p.age + p.address]);
}, []);
上面使用Array.prototype.reduce
。
換句話說,當您希望將對象或數組的所有屬性“簡化”為某種東西時,在這種情況下,最語義化的選擇可能就是Array.prototype.reduce
。
但是, Array.prototype.map
也可以很干凈地完成此工作:
var people = person.map(function(p) {
return p.name + p.age + p.address;
});
現在,這是可讀性/復雜性與語義之間的一個爭論。
為了限制附帶的復雜性(以可讀性的形式),我可能會使用map
函數,即使您可以從技術上講這是范式簡化。
我認為它將為您提供幫助。
var person = [
{name: 'saprsh', age: 22, address:'XYZ'},
{name: 'Ankur', age: 23, address:'ABC'}
];
var stringarray=[];
// $.each(person, function (i, d) {
// stringarray.push(d.name + d.age + d.address);
// });
//for(var i = 0; i < person.length; i++){
// stringarray.push(person[i].name + person[i].age + person[i].address);
//}
var stringarray = person.map(function(p) {
return p.name + p.age + p.address;
});
console.log(stringarray);
結果:[“ saprsh22XYZ”,“ Ankur23ABC”]
請嘗試這個。
試試這個,此方法適合於不同的對象名稱,它將很好地工作。
var person = [
{name: 'saprsh', age: 22, address:'XYZ'},
{name: 'Ankur', age: 23},
{name: 'Richa', age:25, adddress:'ABX', email:'abc@xyz.co'}
];
var result = person.map(function(p){ return Object.keys(p).map(function(k){return p[k]}).join("");})
我假設您想要一個字符串數組。
[{sparsh22XYZ},{ankur23ABC}]
不是這樣的數組。
如果你想
[ "sparsh22XYZ", "ankur23ABC" ]
你可以簡單地去
var string_person = [];
for (var i = 0; i < person.length; i++) {
string_person.push(person[i].name+person[i].age+person[i].address);
}
如果你需要的是對象屬性的一個值的列表,最簡單的方法去與underscore.js庫。
var string_person = _.pluck(person, 'name');
您可以這樣做。
var person = [
{name: 'saprsh', age: 22, address:'XYZ'},
{name: 'Ankur', age: 23, address:'ABC'}
];
var test = person.map(function(one){
var properties = Object.getOwnPropertyNames(one);
return properties.map(function(prop){
return one[prop];
}).join('');
});
console.log(test);
在具有任意數量參數的任何對象數組上調用以下函數,它將返回您想要的內容。
function getStringArray(array){
var resultArray = [];
for (i = 0; i < array.length; i++) {
var result = "";
var keysArray = Object.keys(array[i]).sort()
for(j = 0; j < keysArray.length; j++){
result = result+array[i][keysArray[j]];
}
resultArray.push(result);
}
return resultArray;
}
var string_person = [];
for(var i = 0; i < person.length; i++){
string_person.push(person[i].name + person[i].age + person[i].address);
}
更新:
您也可以使用下划線:
var string_person = _.map(person, function(p){return p.name + p.age + p.address;});
我猜您想將對象的所有成員連接到字符串。 有兩種方法可以做到這一點:
// iterate through the array of persons
for (var index = 0; index < person.length; index++) {
var obj = person[index]; // save the object temporally
person[index] = ''; // place an empty string at the index of the object
// iterate through all members of the object using the "in"-operator
for (var member in obj) {
person[index] += obj[member]; // add the value of the member to the string
}
}
這種技術的問題是,我不能保證它會按您想要的順序加入成員的值。 它應該按照成員定義的順序加入他們。
無論如何,此解決方案可以正常工作,但僅適用於您的情況:
// iterate through the array of persons
for (var index = 0; index < person.length; index++) {
// place a string which contains the joined values of the members in the right order at the index of the object
person[index] = [
person[index].name,
person[index].age,
person[index].address
].join('');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.