首页 > 解决方案 > Javascript:如果元素不存在,如何将元素添加到对象

问题描述

Javascript:如果元素不存在,如何将元素添加到对象

我想像处理数组一样填充对象(如果不存在添加到它)

// push : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

let items = ['aa','xx'];

function newList(item) {

	if (items.indexOf(item) === -1) {
		items.push(item);
	}
	return console.log(items)

}

newList('aa');
newList('bb');
newList('aa');

// how i can do the same with this object?

let itemsObj =
[
	{id: 'Id AA', name: 'Name AA'},
	{id: 'Id BB', name: 'Name BB'},
	{id: 'Id CC', name: 'Name CC'},
	{id: 'Id DD', name: 'Name DD'},
	{id: 'Id EE', name: 'Name EE'},

];

let newItemA = {id: 'Id XX', name: 'Name XX'};
let newItemB = {id: 'Id AA', name: 'Name AA'};

// TODO

标签: javascript

解决方案


您可以在“Sets”的帮助下使用“Array.reduce”和“Array.from”来实现这一点

let itemsObj =
[
	{id: 'Id AA', name: 'Name AA'},
	{id: 'Id BB', name: 'Name BB'},
	{id: 'Id CC', name: 'Name CC'},
	{id: 'Id DD', name: 'Name DD'},
	{id: 'Id EE', name: 'Name EE'},

];

let newItemA = {id: 'Id XX', name: 'Name XX'};
let newItemB = {id: 'Id AA', name: 'Name AA'};


function addItem(item) {
  return Array.from(
            (itemsObj.concat(item)).reduce((s, d) => s.add(JSON.stringify(d)) , new Set)
            , (d) => JSON.parse(d))
}

console.log(addItem(newItemA))

console.log(addItem(newItemB))


推荐阅读