繁体   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