为了账号安全,请及时绑定邮箱和手机立即绑定

如何遍历对象数组并制作键值对?

如何遍历对象数组并制作键值对?

呼啦一阵风 2022-09-29 16:30:13
我有一个这样的对象数组:let someObj = {    items: [{        id: '12',        value: true    }, {        id: '34',        value: true    }, {        id: '56',        value: false    }]}我想把它添加到一个现有的对象,其中id是这个对象的一个键,就像这样:let obj = {    someKey: someValue,    '12': true,    '34': true,    '56': false,}
查看完整描述

4 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

您可以通过以下方式实现您的目标:Array#reduce


const input = {

  items: [{

    id: '12',

    value: true

  }, {

    id: '34',

    value: true

  }, {

    id: '56',

    value: false

  }]

}


const output = input.items.reduce((o, {

  id,

  value

}) => (o[id] = value, o), {})


console.log(output)


另外,也许最简单的方法可能是使用将对象转换为对,然后使用将它们转换为对象:Array#mapObject.fromPairs


const input = {

  items: [{

    id: '12',

    value: true

  }, {

    id: '34',

    value: true

  }, {

    id: '56',

    value: false

  }]

}


const output = Object.fromEntries(input.items.map(({

  id,

  value

}) => [id, value]))


console.log(output)


最后,这是一个功能方法:


  // Composes two functions

  const compose = f => g => x => f (g (x))


  // Given the key-value pairs of some object with 2 properties, maps a pair of values

  const values = ([[, x], [, y]]) => [x, y]


  // Turns an object of two properties into a pair of property values

  const entry = compose (values) (Object.entries)


  // Turns many objects of two properties, into an object on which

  // keys are first properties' values, and vaules the second properties' values.

  const keyValueObject = xs => Object.fromEntries (xs.map (entry))


  const input = {

    items: [{

      id: '12',

      value: true

    }, {

      id: '34',

      value: true

    }, {

      id: '56',

      value: false

    }]

  }


  const output = keyValueObject (input.items)


  console.log(output)

查看完整回答
反对 回复 2022-09-29
?
九州编程

TA贡献1785条经验 获得超4个赞

您可以从项中循环访问每个项并创建一个新对象,如下所示。


let someObj = {

    items: [{

        id: '12',

        value: true

    }, {

        id: '34',

        value: true

    }, {

        id: '56',

        value: false

    }]


}

const newObj = {};

someObj.items.map(item =>{

newObj[item.id]= item.value;

});


console.log(newObj);


查看完整回答
反对 回复 2022-09-29
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

使用和将简化。mapObject.values


const output = arr => Object.fromEntries(arr.map(Object.values));


let someObj = {

  items: [

    {

      id: "12",

      value: true,

    },

    {

      id: "34",

      value: true,

    },

    {

      id: "56",

      value: false,

    },

  ],

};



console.log(output(someObj.items));


查看完整回答
反对 回复 2022-09-29
?
慕沐林林

TA贡献2016条经验 获得超9个赞

首先,您可以将它转换为“KV”条目


> someObj.items.map(({id, value}) => [id, value])

[ [ '12', true ], [ '34', true ], [ '56', false ] ]

然后将其转换为对象


> Object.fromEntries(someObj.items.map(({id, value}) => [id, value]))

{ '12': true, '34': true, '56': false }

你可以做一个函数


> let ObjectFromMapping = (vs, mapping) => Object.fromEntries(vs.map(mapping))

> ObjectFromMapping(someObj.items, ({id, value}) => [id, value])

{ '12': true, '34': true, '56': false }

也许变成一个可迭代的是一个好主意vs


> let ObjectFromMapping = (vs, mapping) => Object.fromEntries([... vs].map(mapping))

> ObjectFromMapping("abc", (char, idx) =>  [idx, char])

{ '0': 'a', '1': 'b', '2': 'c' }

然后,您的函数将适用于任何iterable


查看完整回答
反对 回复 2022-09-29
  • 4 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信