繁体   English   中英

如何将对象数组转换为数组

[英]how to convert an array of objects into an array

我有以下对象的数组。

response: [0] 
          Data: '455'
          [1]
          Data: '456'
          [2]
          Data: '457'


var normalizedArray = newlist.map(function (obj) {
                    return obj.Data;
                });

我可以使用上述函数将上述Object数组转换为'notmalizedArray'数组。 这有效,并给我以下输出。

normalizedArray= ['455', '456', '457'];

如果不是只有1个元素,我有以下对象数组。

response: [0] 
          Data: '455'
          Note: 'tre'
          Id: '4'
          [1]
          Data: '456'
          Note: 'bre'
          Id: '5'
          [2]
          Data: '457'
          Note: 'cre'
          Id: '6'

我想要上述对象数组的以下数组输出。

normalizedArray = ['455', 'tre', '4', '456', 'bre', '5', '457', 'cre', '6']

有人可以让我知道在下面的函数中要更改为达到上面显示的normalizedArray的内容。

var normalizedArray = newlist.map(function (obj) {
                return obj.Data;
            });

最简单的方法是建立一个数组数组,然后将它们展平。

首先,让我们像以前一样使用map构建数组:

// ES6
let normalizedArr = response.map(function({Data, Note, Id}) {
    return [Data, Note, Id];
});
// before ES6
var normalizedArr = response.map(function(obj) {
    return [obj.Data, obj.Note, obj.Id];
});

然后我们将其展平。 没有flatten Javascript函数:我们只需使用Array#concat将每个数组依次附加到一个空数组中:

// ES6
let finalArr = [].concat(...normalizedArr);
// before ES6
var finalArr = Array.prototype.concat.apply([], normalizedArr);

尝试跟随

var normalizedArray = newlist.map(function (obj) {
                return [obj.Data,obj.Note,obj.Id];
            });

var res = [];
normalizedArray .forEach(function(arr){res = res.concat(arr);})
console.log(res)

这是使用下划线的mapvalues函数的解决方案。 映射的结果将是一个数组数组,因此可以使用flatten获得一个数组:

var result = _.chain(response)
    .map(_.values)
    .flatten()
    .value();

使用下面的代码,无论数组对象有多少个键,结果始终是一个扁平的数组。

// ES5
var normalizedArray = [];
response.forEach(function(obj) {
   Object.keys(obj).forEach(function(ele) {
      normalizedArray.push(obj[ele]);
   });
});
console.log(normalizedArray); // => ['455', 'tre', '4', '456', 'bre', '5', '457', 'cre', '6']

// ES6 one liner
let normalizedArray = [];
response.forEach(obj => Object.keys(obj).forEach(ele => normalizedArray.push(obj[ele])));

console.log(normalizedArray); // => ['455', 'tre', '4', '456', 'bre', '5', '457', 'cre', '6']
var normalizedArray = newlist.reduce(function (resultArray, nextObj) {
                          resultArray.push(nextObj.Data, nextObj.Note, nextObj.Id);
                          return resultArray;
                      }, []);

Array.prototype.reduce()具有一个约简函数和一个初始值,该值作为第一个参数传递给该约简函数,第二个参数是数组中的下一个元素。 因为我们想最后生成一个数组,所以才有[]

您可以使用concat来做到这一点:

 var myArray = [ { Data: '455', Note: 'tre', Id: '4' }, { Data: '456', Note: 'bre', Id: '5' }, { Data: '457', Note: 'cre', Id: '6' } ]; var arr = myArray.map(function(obj) { return Object.keys(obj).map(function (key) { return obj[key]; });; }); var merged = [].concat.apply([], arr); console.log(merged); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM