我有一些数据
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()
?
答案 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)