这是我的初始数组:
[
{
id: 1,
name: 'pos',
code: 'pos123',
appCode: 22,
},
{
id: 2,
name: 'tailor',
code: 'tailor123',
appCode: 21,
}
]
我想要的输出:
{
pos123: {
id: 1,
name: 'pos',
code: 'pos123',
appCode: 22,
},
tailor123: {
id: 2,
name: 'tailor',
code: 'tailor123',
appCode: 21,
},
}
我尝试使用map
执行此操作,但我无法弄明白。我应该在这里使用reduce
吗?
答案 0 :(得分:3)
您的输出不是数组 - 它是一个对象,因此您必须使用reduce
。您只能使用map
将数组中的X个项目转换为另一个数组中的X个项目。
const input=[{id:1,name:'pos',code:'pos123',appCode:22,},{id:2,name:'tailor',code:'tailor123',appCode:21,}]
const output = input.reduce((a, obj) => {
a[obj.code] = obj;
return a;
}, {});
console.log(output);
答案 1 :(得分:1)
您可以使用Object.assign
将数组映射到预期的键和值形状。尝试:
let array = [
{
id: 1,
name: 'pos',
code: 'pos123',
appCode: 22,
},
{
id: 2,
name: 'tailor',
code: 'tailor123',
appCode: 21,
}
];
let output = Object.assign(...array.map(x => ({ [x.code]: x })));
console.log(output);
答案 2 :(得分:1)
var yourArray = [
{
id: 1,
name: 'pos',
code: 'pos123',
appCode: 22,
},
{
id: 2,
name: 'tailor',
code: 'tailor123',
appCode: 21,
}
];
//this is what you required
var output = yourArray.reduce((obj, item) => {
obj[code] =item;
return obj;
}, {});
答案 3 :(得分:0)
使用数组缩减功能
var data = [{
id: 1,
name: 'pos',
code: 'pos123',
appCode: 22,
},
{
id: 2,
name: 'tailor',
code: 'tailor123',
appCode: 21,
}
]
var modData = data.reduce(function(acc, curr) {
//acc is the empty array passed as argument
// if empty array does not have a property pos123 or so
// create a key by this name
if (!acc.hasOwnProperty(curr.code)) {
// then add property to it
acc[curr.code] = {
id: curr.id,
name: curr.name,
appCode: curr.appCode
}
}
return acc;
}, {})
console.log(modData)

答案 4 :(得分:0)
使用循环可以做到这一点。
const resp = [
{
id: 1,
name: 'pos',
code: 'pos123',
appCode: 22,
},
{
id: 2,
name: 'tailor',
code: 'tailor123',
appCode: 21,
}
]
let res = {};
for (let i = 0; i < resp.length; i++) {
res[resp[i]['code']] = {
id: resp[i]['id'],
name: resp[i]['name'],
appCode: resp[i]['appCode'],
code: resp[i]['code']
}
}
console.log(res);
答案 5 :(得分:0)
似乎其他解决方案在结果对象中包含&#39; code&#39; -property。这个没有
const test = [
{
id: 1,
name: 'pos',
code: 'pos123',
appCode: 22,
}, {
id: 2,
name: 'tailor',
code: 'tailor123',
appCode: 21,
}
];
const test2 = JSON.parse(JSON.stringify(test));
const result = document.querySelector("#result");
result.textContent = "**No redundancy\n" + JSON.stringify(
test.reduce( (newObj, el) =>
(newObj[el.code] = delete el.code && el) && newObj, {}
), null, " ");
// alternative
result.textContent += "\n\n**Alternative\n" + JSON.stringify(
test2.reduce( (newObj, el) => (newObj[el.code] = el) && newObj, {}
), null, " ");
&#13;
<pre id="result"></pre>
&#13;