我会直截了当地说,所以这就是我所拥有的:
const someObj = {
one: [
{
id: 123,
text: "lalala"
},
{
id: 456,
text: "lalala2"
},
{
id: 789,
text: "lalala3"
}
],
two: [
{
id: 111,
text: "text random"
},
{
id: 222,
text: "text random2"
},
{
id: 333,
text: "text random3"
}
]
};
这就是我需要的:
const someOtherObj = {
111: {
id: 111,
text: "text random"
},
222: {
id: 222,
text: "text random2"
},
333: {
id: 333,
text: "text random3"
},
123: {
id: 123,
text: "lalala"
},
456: {
id: 456,
text: "lalala2"
},
789: {
id: 789,
text: "lalala3"
}
};
我知道这可以在没有百万次循环的情况下实现,只是我想不出任何智能解决方案。 :/所以,也许有人可以帮我解决这个难题? :)
谢谢:)
答案 0 :(得分:0)
尝试使用ES6
Array#reduce
功能
reduce
创建了包含所有内部对象的数组reduce
用于使用id
const someObj = { one: [ { id: 123, text: "lalala" }, { id: 456, text: "lalala2" }, { id: 789, text: "lalala3" } ], two: [ { id: 111, text: "text random" }, { id: 222, text: "text random2" }, { id: 333, text: "text random3" } ] };
var res = Object.values(someObj).reduce((a,b)=> (b.forEach(val=> a.push(val)),a),[])
var f = res.reduce((a,b)=> (a[b.id] = b, a),{})
console.log(f)
答案 1 :(得分:0)
你只需要使用两个循环,不再需要(使用ES6看你的例子也使用它)
const newObj = {};
for(const key in someObj) {
for(let i = 0; i < someObj[key].length; i++) {
const obj = someObj[key][i];
newObj[obj.id] = {
id: obj.id,
text: obj.text
}
}
}