javascript - 数组中的项目无法识别。 - 杰斯

标签 javascript arrays object

我有一个对象数组,如果用户做出一些选择,我会向其中添加新对象。然后,当我刷新页面时,我确保保存这些选项,以继续显示它们,除非用户删除它们。

同时,如果用户尝试再次添加相同的选项,后面的代码将不允许他们这样做。

问题是,刷新后,如果我尝试再次添加相同的选项,数组不会将现有项目识别为与我尝试添加的项目相同的项目,并且它允许我这样做。

实际上,这是一个项目的示例以及发生这种情况时我在数组中的内容: 项目:

{name: "Vinos", type_products: "Vinos", active: true}
active: true
name: "Vinos"
type_products: "Vinos"
[[Prototype]]: Object

数组:filtersSelected。

this.filtersSelected[0]
{name: "Vinos", type_products: "Vinos", active: true}
active: true
name: "Vinos"
type_products: "Vinos"
[[Prototype]]: Object

因此,如您所见,这是同一件事,但是,当我进行任何这些验证时,我总是收到错误的值:

const index = this.filtersSelected.indexOf(item);    //the value is always -1
this.filtersSelected.filter(el => el == item)   //the value is always [] (an empty array)
this.filtersSelected.includes(item)   //the value is always false

如果该项目尚未在数组中,如何检查/比较数组中的值和项目之间的值,以执行某些操作?

(如

if(index <= -1){array.push(item);}

)

非常感谢!

最佳答案

您必须确定这些对象的哪些属性是使它们唯一的“键”,并迭代数组来查找该键。当没有找到key时,则将其添加到数组中,否则,不执行任何操作。

例如,如果 name + type_products 代表您可以执行的操作:

const myArrayOfProducts = [];

const addItemToMyProducts = (item) => {
  const { name, type_products } = item;
  const found = myArrayOfProducts.some(p => p.name === name && p.type_products === type_products);
  if (!found) {
    myArrayOfProducts.push(item);
  }
};

const item1 = {name: "Vinos", type_products: "Vinos", active: true};
const item2 = {name: "foo", type_products: "bar", active: true};
const item3 = {name: "Vinos", type_products: "Vinos", active: false};

addItemToMyProducts(item1); // Adds
addItemToMyProducts(item1); // Skips
addItemToMyProducts(item2); // Adds
addItemToMyProducts(item3); // Skips (key matches)

console.log(myArrayOfProducts);
// Returns 
// [
//   { name: 'Vinos', type_products: 'Vinos', active: true },
//   { name: 'foo', type_products: 'bar', active: true }
// ]

关于javascript - 数组中的项目无法识别。 - 杰斯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68613890/

相关文章:

javascript - 检查 SQL 数据库是否有 ASP.NET 更改的最佳实践

javascript - did() 是否完成与 Javascript Promise 中的 catch() 相同的事情(使用sequelize 和 bluebird)?

ruby - 在 Ruby 中比较数组的最有效方法

arrays - swift 2.2 : cannot convert value of type '[B]' to specified type '[A]'

PHP For 循环,比较递增值和递增数组

javascript - JS 修改 PHP 数组

c# - List.Contains 对象比较失败

python - Django 对象是 "non subscriptable"导致我编写冗余代码

java - JavaScript 中 Java 的 Thread.sleep() 等价物是什么?

JavaScript:在父弹出窗口上添加事件监听器