【问题标题】:How to find index of an array that contains specific array in it? [duplicate]如何找到包含特定数组的数组的索引? [复制]
【发布时间】:2020-09-27 04:28:21
【问题描述】:

我正在开发一个电子商务购物车,在下面的购物车中,每个商品都可能有一些“变体”,商品模型如下所示,其中 Articoli == item 并且每个 Articoli 里面可能有一个 Varianti 数组:

class Articoli {
    constructor(id, titolo, qta, prezzo, prezzo_s, img, varianti) {
        this.id = id;
        this.titolo = titolo;
        this.qta = qta;
        this.prezzo = prezzo;
        this.prezzo_s = prezzo_s;
        this.img = img;
        this.varianti = varianti;
    }
}

class Varianti {
    constructor(id, titolo, stato, prezzo) {
        this.id = id;
        this.titolo = titolo;
        this.stato = stato;
        this.prezzo = prezzo;
    }
}

现在我必须更新购物车中每个添加项目的数量。如果没有任何变体,则每个添加的项目的 ID 为 cd-cart-ID,而具有变体的项目的 ID 为 cd-cart-var-ID,因此当添加两个没有任何变体的项目时,数量只会更新,而如果相同的项目添加了一些变体其中它在购物车中创建了一个新项目,但是问题来了我可以添加具有相同变体的项目,因此必须更新它的数量,但直到现在我一直在寻找具有等于的数组索引身份证:

var objIndex = articoli.findIndex((obj => obj.id == id))

但是在两个添加的项目中 ID 是相等的,例如对于一个项目 cd-cart-ID,ID 等于 7891,甚至在具有组件 ID cd-cart-var-ID 的变体的新添加项目中,数组中的 ID 等于 7891。

所以我打算通过检查它的 ID 和其中的 Variants 来获取更新数量的 objectIndex,如下所示:

var objIndex = articoli.findIndex((obj => obj.id == id && obj.varianti == articolo.varianti))

articolo.varianti 是 Varianti 对象数组,但它在任何情况下都会返回索引 -1,即使我添加了两个没有任何变体的项目,所以 varianti == []... p>

【问题讨论】:

  • 你能举一个articolo.varianti 的例子,你在哪里申请findIndex
  • articolo 是一个数组时,它可能没有articolo.varianti。你应该把它放在一个变量中,......也许只是varianti
  • 当操作数是两个不同的数组时,== 总是返回 false。您需要比较数组中的每个元素。
  • 正确,默认情况下 array1 == array2 //true 仅当变量指向相同的内存地址(即堆上的相同对象)时。默认情况下,JavaScript 会比较对象的内存地址。
  • @trincot 肯定明白了,此时我会比较每个元素,谢谢!

标签: javascript arrays


【解决方案1】:

您的idobj.varianti 似乎是undefined。您可以使用以下示例查找索引:

class Articoli {
  constructor(id, titolo, qta, prezzo, prezzo_s, img, varianti) {
      this.id = id;
      this.titolo = titolo;
      this.qta = qta;
      this.prezzo = prezzo;
      this.prezzo_s = prezzo_s;
      this.img = img;
      this.varianti = varianti;
  }
}


let articolies = [
  new Articoli(1, 'title 1', 'qta 1', 'prezzo1', 'prezzo_s 1', 'img 1', 'varianti 1'),
  new Articoli(1, 'title 111', 'qta 1', 'prezzo1', 'prezzo_s 1', 'img 1', 'varianti 111'),
  new Articoli(1, 'title 2', 'qta 2', 'prezzo2', 'prezzo_s 2', 'img 2', 'varianti 2')
]

let objToFind = new Articoli(1, 'title 111', 'qta 1', 'prezzo1', 'prezzo_s 1', 'img 1', 'varianti 111');
var objIndex = articolies.findIndex((obj => obj.id == objToFind.id && 
    obj.varianti == objToFind.varianti))

console.log(objIndex);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2020-11-13
    • 2019-11-16
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多