javascript - 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)
问题是在进行连接之前我应该寻找某些条件。比如像
- 如果一个对象与 field1 相同并且具有相同的 last 但一个属性
ventasAnuales | empleados
已存在于数组中,但 field3 不同。它应该取代它
例如,假设我想添加以下对象
{
active: true,
field1: "100",
field2: "",
field3: "2",
name: 0.0020423,
ventasAnuales: "ventasAnuales",
slActive: true
},
它将替换数组的第一个元素
- 如果我添加一个具有相同 field3 值的对象,最后一个属性相同但一个属性
ventasAnuales | empleados
并且 field1 不同,则应将其替换为新对象。
例如,假设我想添加以下对象。
{
active: true,
field1: "50",
field2: "",
field3: "1",
name: 0.1020123,
ventasAnuales: "ventasAnuales",
slActive: true
}
它最终应该替换数组的第一个元素。
我应该如何编写我的 concat 来完成这项工作?
解决方案
只需过滤数组以查找应阻止插入的任何项目。如果您没有找到,请添加新项目。
你可以[].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] = …
}
推荐阅读
- c++ - 我可以延迟 C++ 中布尔变量的评估吗?
- domain-driven-design - cross language framework like axon framework?
- mqtt - How can I limit certain topics to be used only by specific clients?
- php - bootstrap 4页面设计未显示为例外
- weblate - 使用 weblate 翻译软件以外的内容
- ios - 关于Swift在一个viewController中创建多个collectionView问题的问题
- jsxgraph - 如何修复 jsxgraph 代码绘制正多边形?
- android-fragments - error: incompatible types: SearchFragment cannot be converted to Fragment
- sharepoint - 放置图像并在图像顶部放置 wiki 页面
- java - Cant compile java code in linux mint, i think java is not properly installed