Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在对象数组中循环并生成键值对?_Javascript_Arrays_Object - Fatal编程技术网

Javascript 如何在对象数组中循环并生成键值对?

Javascript 如何在对象数组中循环并生成键值对?,javascript,arrays,object,Javascript,Arrays,Object,我有这样一个对象数组: let someObj = { items: [{ id: '12', value: true }, { id: '34', value: true }, { id: '56', value: false }] } let obj = { someKey: someValue, '12': true, '34': tr

我有这样一个对象数组:

let someObj = {
    items: [{
        id: '12',
        value: true
    }, {
        id: '34',
        value: true
    }, {
        id: '56',
        value: false
    }]

}
let obj = {
    someKey: someValue,
    '12': true,
    '34': true,
    '56': false,
}
我想将其添加到一个现有对象,其中id是该对象的键,如下所示:

let someObj = {
    items: [{
        id: '12',
        value: true
    }, {
        id: '34',
        value: true
    }, {
        id: '56',
        value: false
    }]

}
let obj = {
    someKey: someValue,
    '12': true,
    '34': true,
    '56': false,
}

您可以使用
Array#reduce
实现您的目标,如下所示:

const输入={
项目:[{
id:'12',
值:true
}, {
id:'34',
值:true
}, {
id:'56',
值:false
}]
}
const output=input.items.reduce((o{
身份证件
价值
})=>(o[id]=值,o),{})

log(输出)
您可以从items中迭代每个项并创建一个新对象,如下所示

让someObj={
项目:[{
id:'12',
值:true
}, {
id:'34',
值:true
}, {
id:'56',
值:false
}]
}
const newObj={};
someObj.items.map(item=>{
newObj[item.id]=item.value;
});

console.log(newObj)首先,您可以将ITEN转换为“KV”条目

>someObj.items.map({id,value})=>[id,value])
[['12',真],'34',真],'56',假]]
然后把它变成物体

>Object.fromEntries(someObj.items.map({id,value})=>[id,value]))
{'12':对,'34':对,'56':错}
你可以做一个函数

>让ObjectFromMapping=(vs,mapping)=>Object.fromEntries(vs.map(mapping))
>ObjectFromMapping(someObj.items,({id,value})=>[id,value])
{'12':对,'34':对,'56':错}
也许把
vs
变成一个iterable是个好主意

>让ObjectFromMapping=(vs,mapping)=>Object.fromEntries([…vs].mapping))
>ObjectFromMapping(“abc”,(字符,idx)=>[idx,字符])
{0':'a','1':'b','2':'c'}

然后,您的函数将在任何
iterable
使用
map
对象上工作。值将简化

const output=arr=>Object.fromEntries(arr.map(Object.values));
让someObj={
项目:[
{
id:“12”,
价值观:正确,
},
{
id:“34”,
价值观:正确,
},
{
id:“56”,
值:false,
},
],
};

日志(输出(someObj.items))您有哪些具体问题?你知道如何迭代数组吗?您知道如何访问对象的属性吗?你知道如何将属性添加到对象中吗?可能是重复的嘿,回答不错。它在概念上类似于我的第三次拍摄(功能性拍摄),但你的拍摄是最简单的。完美,除非项目有两个以上的属性。在这种情况下,我的固定映射仍然有效。无论如何,你的答案应该是OP选择的答案。谢谢@MatíasFidemraizer,同意你的观点。我喜欢你详细的概念和答案。