簡體   English   中英

將對象數組轉換為字符串數組?

[英]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.reduceArray.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" ]

你可以簡單地去

普通的舊Javascript:

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庫

如果你需要的是對象屬性的一個值的列表,最簡單的方法去與underscore.js庫。

var string_person = _.pluck(person, 'name');

http://underscorejs.org/#pluck

您可以這樣做。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM