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

时间:2017-01-24 00:09:43

标签: javascript arrays loops object underscore.js

我有以下对象数组。

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

6 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

尝试以下

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)

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

var normalizedArray = newlist.reduce(function (resultArray, nextObj) {
                          resultArray.push(nextObj.Data, nextObj.Note, nextObj.Id);
                          return resultArray;
                      }, []);

Array.prototype.reduce()采用缩减函数和初始值作为第一个参数传递给该缩减函数,第二个参数是数组中的下一个元素。因为我们想要最终生成一个数组,这就是为什么有一个[]

答案 5 :(得分:0)

您可以使用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);