我有一个对象数组,如下所示:
stuff = [
{ value: 'elevator', checked: true },
{ value: 'something', checked: false },
{ value: 'else', checked: true },
]
我正试图得到这样的东西:
{
'elevator': true,
'something: false,
'else': true,
}
我从昨天起就得到的是一系列对象,如:
[
{ 'elevator': true },
{ 'something': false },
{ 'else': true }
];
我尝试使用映射数组,然后使用Object.assign
,但它无效。我得到了以前的代码。
答案 0 :(得分:1)
使用reduce
var output = stuff.reduce( (a,c) => (a[c.value] = c.checked, a) , {} )
<强>演示强>
var stuff = [
{ value: 'elevator', checked: true },
{ value: 'something', checked: false },
{ value: 'else', checked: true },
];
var output = stuff.reduce( (a,c) => (a[c.value] = c.checked, a) , {} )
console.log( output );
修改
使用object.assign
stuff.reduce( (a,c) => Object.assign( {}, a, { [c.value] : c.checked }) , {} )
答案 1 :(得分:1)
迭代东西数组,所以你会得到每个对象的东西。然后获得你需要的那个值。
var stuff = [
{ value: 'elevator', checked: true },
{ value: 'something', checked: false },
{ value: 'else', checked: true },
];
var obj = {};
for( var i=0; i<stuff.length; i++) {
obj[stuff[i]['value']] = stuff[i]['checked'];
}
console.log(obj);
答案 2 :(得分:0)
您可以reduce
函数从给定数组中创建单个对象。只需在其中添加您的逻辑。在这种情况下,value
为属性名称,checked
为其值。
const stuff = [
{ value: 'elevator', checked: true },
{ value: 'something', checked: false },
{ value: 'else', checked: true },
]
const mapped = stuff.reduce((obj, item) => (obj[item.value] = item.checked, obj), {});
console.log(mapped);
答案 3 :(得分:0)
如果您可以使用ES6,则可以使用Object.assign
,array.prototype.map
,部分destructuring
,object litteral dynamic key
和spread operator
:
var stuff = [
{ value: 'elevator', checked: true },
{ value: 'something', checked: false },
{ value: 'else', checked: true },
];
var result = Object.assign({}, ...stuff.map(({value, checked}) => ({[value]: checked})));
console.log(result);
&#13;