在JavaScript中更改对象的结构

时间:2016-10-08 16:37:02

标签: javascript arrays ecmascript-6

我有一些数据

arr = {
  'a': ['1', '2', '3'],
  'b': ['2', '3', '4'],
  'c': ['3', '5', '6'],
}

如何将其更改为

newArr = {
  '1': ['a'],
  '2': ['a', 'b'],
  '3': ['a', 'b', 'c'],
  '4': ['b'],
  '5': ['c'],
  '6': ['c']
}

以最有效的方式做这样的事情

const newData = {};
Object.keys(oldData).forEach(key => {
  newData[key].forEach(value => {
    if (!newData[value]) {
      newData[value] = [];
    }
    newData[value].push(key);
  });
});

使用ES6会不会很容易,可能会使用reduce()

2 个答案:

答案 0 :(得分:1)

只需更改一行

newData[key].forEach(value => {

oldData[key].forEach(value => {



var oldData = {
  'a': ['1', '2', '3'],
  'b': ['2', '3', '4'],
  'c': ['3', '5', '6'],
};


const newData = {};
Object.keys(oldData).forEach(key => {
  oldData[key].forEach(value => {
// ^^^^^^ change to oldData instead of newData
    if (!newData[value]) {
      newData[value] = [];
    }
    newData[value].push(key);
  });
});
console.log(newData);




答案 1 :(得分:-1)

您可以像这样使用reduce()forEach()



var arr = {
  'a': ['1', '2', '3'],
  'b': ['2', '3', '4'],
  'c': ['3', '5', '6'],
}

var result = Object.keys(arr).reduce(function(r, e) {
  arr[e].forEach(function(a) {
    if (!r[a]) r[a] = [];
    r[a].push(e)
  })
  return r;
}, {});

console.log(result)