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