使用key:value dynamic将对象数组转换为en对象

时间:2018-02-19 10:17:23

标签: javascript arrays object

我有一个对象数组,如下所示:

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,但它无效。我得到了以前的代码。

4 个答案:

答案 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.assignarray.prototype.map,部分destructuringobject litteral dynamic keyspread operator

&#13;
&#13;
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;
&#13;
&#13;