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

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;
                });

我可以使用上述函数将上述对象数组转换为数组 '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;
            });

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

// 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']

执行此操作的最简单方法是构建一个数组数组,然后将它们展平。

首先,让我们像您一样使用 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.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);

尝试关注

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)

下面是一个使用下划线的 map and values functions. The result of the map will be an array of arrays so flatten 然后用于获取一个数组的解决方案:

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