一个对象数组,现在需要获取数组中键重复的元素,只要一组代表性的键,对于值的处理希望能够按照原来对应键来摆放,?

现在:

data=[{label:'a',value:'1'},{label:'a',value:'2'},{label:'b',value:'1'},{label:'c',value:'1'},{label:'d',value:'1'},{label:'a',value:'3'},{label:'b',value:'2'},{label:'c',value:'2'},]

希望:

data=[{label:'a',value1:'1',value2:'2',value3:'3'},{label:'b',value1:'1',value2:'2'},{label:'c',value1:'1',value2:'2'},{label:'d',value1:'1',value2:'2'}]


回答:

const data = [{label:'a',value:'1'},{label:'a',value:'2'},{label:'b',value:'1'},{label:'c',value:'1'},{label:'d',value:'1'},{label:'a',value:'3'},{label:'b',value:'2'},{label:'c',value:'2'},]

const newData = data.reduce((newArr, item) => {

const sameLabelItem = newArr.filter(_item => _item.label === item.label)[0] // 现在 newArr 中找有没有相同 label 的对象

if (sameLabelItem) { // 如果有相同 label 的对象,直接在这个相同label对象的 value 中 push item 的 value

sameLabelItem.value.push(item.value)

} else { // 如果没有,newArr 直接 push item

newArr.push({ label: item.label, value: [item.value] })

}

return newArr // 返回 newArr

}, [])

console.log(newData) // 你要的结果


回答:

const data = [

{label:'a',value:'1'},

{label:'a',value:'2'},

{label:'b',value:'1'},

{label:'c',value:'1'},

{label:'d',value:'1'},

{label:'a',value:'3'},

{label:'b',value:'2'},

{label:'c',value:'2'}

]

// 相对之前的没啥优点

// 就用时间优化了一下写法,提高了一下复用

const format = (list, idKey = 'label', merageKey = 'value') => {

let result = new Map()

list.map(item => {

let temp = result.get(item[idKey]) || {...item, [merageKey]: []};

result.set(item[idKey], {...temp, [merageKey]: [...temp[merageKey], item[merageKey]]})

})

return [...result.values()]

}

console.log(format(data))


回答:

Object.values(data.reduce((res, v) => ((res[v.label] ||= {label: v.label,value: []}).value.push(v.value), res), {}))

以上是 一个对象数组,现在需要获取数组中键重复的元素,只要一组代表性的键,对于值的处理希望能够按照原来对应键来摆放,? 的全部内容, 来源链接: utcz.com/p/934948.html

回到顶部