首页 > 解决方案 > Javascript,如果该对象的某些属性在数组中不存在,如何将对象添加到数组中

问题描述

我有以下数组(名称总是随机的)

array =
[
{
active: true,
field1: "100",
field2: "",
field3: "1",
name: 0.0020123,
ventasAnuales: "ventasAnuales",
slActive: true
},
{
active: true,
field1: "100",
field2: "",
field3: "1",
name: 0.0020123,
ventasAnuales: "ventasAnuales",
slActive: true
},
{
active: true,
field1: "100",
field2: "",
field3: "1",
name: 0.0020123,
ventasAnuales: "ventasAnuales",
slActive: true
},
{
active: true,
field1: "100",
field2: "",
field3: "1",
name: 0.0020123,
empleados: "empleados",
slActive: true
}
]

现在我想在数组中添加额外的对象,我用一个 concat 来做

array.concat(a).filter(i => i.active)

问题是在进行连接之前我应该​​寻找某些条件。比如像

  1. 如果一个对象与 field1 相同并且具有相同的 last 但一个属性ventasAnuales | empleados已存在于数组中,但 field3 不同。它应该取代它

例如,假设我想添加以下对象

{
active: true,
field1: "100",
field2: "",
field3: "2",
name: 0.0020423,
ventasAnuales: "ventasAnuales",
slActive: true
},

它将替换数组的第一个元素

  1. 如果我添加一个具有相同 field3 值的对象,最后一个属性相同但一个属性 ventasAnuales | empleados并且 field1 不同,则应将其替换为新对象。

例如,假设我想添加以下对象。

{
    active: true,
    field1: "50",
    field2: "",
    field3: "1",
    name: 0.1020123,
    ventasAnuales: "ventasAnuales",
    slActive: true
    }

它最终应该替换数组的第一个元素。

我应该如何编写我的 concat 来完成这项工作?

标签: javascriptarrays

解决方案


只需过滤数组以查找应阻止插入的任何项目。如果您没有找到,请添加新项目。

你可以[].filter()这样使用:

const items = […, …, …]
const containing = items.filter(item => item.active == true);
if (containing.length == 0) items.push( … )

但是[].every()或者[].some()也可以。

示例every()

if ( !items.every( i => !i.active )) 
  items.push({ active: false })

如果您需要替换现有元素,您可以findIndex()像这样使用:

const items = […, …, …];
const idx = items.findIndex(itm => itm.active);


// create a new item
if (idx < 0) {
  items.push(…)
}
else {
  // update
  items[idx] = …
}

推荐阅读