从JSON中获取重复的对象键的值,并只用一个键替换返回。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从JSON中获取重复的对象键的值,并只用一个键替换返回。相关的知识,希望对你有一定的参考价值。
我想知道如何从JSON中获取重复的对象键的值并替换成其他对象键中唯一的一个,最后以数组形式返回。
注意:这是一个从JSON中返回的数据。 这是从JSON结果中返回的数据。
例子如下。
const obj = { id: 71, books: 'Things fall apart' }
{ id: 71, books: 'The Namesake' }
{ id: 71, books: 'The Secret Life of Bees' }
{ id: 417, books: 'The Namesake' }
{ id: 417, books: 'State of Wonder' }
{ id: 22, books: "Americanah" }
{ id: 22, books: 'Things fall apart' }
得到上述数据后,我的想法是什么?
[
{
"id": 71,
"books": [
"Things fall apart",
"The Namesake",
"The Secret Life of Bees"
]
},
{
"id": 417,
"books": [
"The Namesake",
"State of Wonder"
]
},
{
"id": 22,
"books": [
"Americanah",
"Things fall apart"
]
}
]
谢谢你帮我解决这个问题。
答案
你可以尝试用 reduce
和 findIndex
:
const arr = [
{ id: 71, books: 'Things fall apart' },
{ id: 71, books: 'The Namesake' },
{ id: 71, books: 'The Secret Life of Bees' },
{ id: 417, books: 'The Namesake' },
{ id: 417, books: 'State of Wonder' },
{ id: 22, books: "Americanah" },
{ id: 22, books: 'Things fall apart' }
];
const res = arr.reduce((a, {id, books}) => {
const index = a.findIndex(item => item.id === id);
if (index === -1) {
a.push({id, books: [books]});
} else {
a[index].books.push(books);
}
return a;
}, []);
console.log(res);
.as-console-wrapper{min-height: 100%!important; top: 0;}
另一答案
嗨 @Stan50 欢迎来到Stack Overflow。
const arrayUnique = Array.from(
obj
.reduce(
(acc, item) => (
acc.set(item['id'], item)
),
new Map()
)
.values()
);
reduce()方法执行一个reducer函数,它在数组中的每个元素上执行。我们有累加器(acc)和当前值(item)。我们的reducer函数返回的值被分配给累加器(在这种情况下,我们有italValue,这是new Map(),所以当回调被调用时,这将是第一个),然后我们设置(acc.set(item['id'],item)=>对于这个id,我们设置current item),这个累加器在整个数组的每次迭代中都会被记住.使用Map是很重要的,因为它保存了顺序.而在最后,你使用Values,只得到对象和Array.from,从这些唯一的由id对象创建一个数组。
另一答案
你是说obj是一个数组?最好取个类似于 records
. 还有: books
应名 book
或 bookName
因为它不是一个数组!
const result = obj.reduce((accumulator, record) => {
const { id, books } = record;
const existingRecord = accumulator.find(storedRecord => storedRecord.id === id);
if (existingRecord) {
existingRecord.books.push(books);
} else {
accumulator.push({id, books: [books]});
}
return accumulator;
}, []);
console.log(result);
以上是关于从JSON中获取重复的对象键的值,并只用一个键替换返回。的主要内容,如果未能解决你的问题,请参考以下文章