Могу ли я связать объект в массиве во время FindIndex? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть объект, содержащий несколько пар ключ-значение, одна из которых является массивом. Я пытаюсь найти индекс указанного массива, где свойства параметров соответствуют свойствам параметров другого объекта. Добавленная мною функция работает правильно только с идентификатором продукта, но не работает при попытке сравнить объект параметров с newObj.options.

Объект

parsedCart = {
  id:1592539903073,
  products: [{
    productID: 1001,
    name: 'Test Product'
    qty: 1,
    options: {
      Color: "Red",
    }
  }]
}

Объект I wi sh для сравнения с

newObj = {
  productID: 1001,
  name: 'Test Product',
  qty: 1,
  options: {
    Color: "Red",
  }
}

Функция

function productExists(newObj) {
    return (
      newObj.productID === productID &&
      JSON.stringify(newObj.options) === JSON.stringify(options)
    );
  }

  let exists = parsedCart.products.findIndex(productExists);
  console.log(exists);

1 Ответ

0 голосов
/ 19 июня 2020

Я понимаю, что вы хотите найти индекс продуктов в parsedCart в соответствии с данными в newObj. И создал новые элементы в параметрах parsedCart для примера

Если я правильно интерпретировал ваш вопрос, я думаю, причина ошибки в том, что вы пытаетесь использовать свойства productID и options в контекст parsedCart.products в findIndex

Попробуйте следующий пример

const parsedCart = {
  id: 1592539903073,
  products: [
    {
      productID: 1001,
      name: "Test Product",
      qty: 1,
      options: {
        Color: "Red",
      },
    },
    {
      productID: 1002,
      name: "Test Product",
      qty: 1,
      options: {
        Color: "Red",
      },
    },
  ],
};

const newObj = {
  productID: 1002,
  name: "Test Product",
  qty: 1,
  options: {
    Color: "Red",
  },
};

const index = parsedCart.products.findIndex(
  (product) =>
    newObj.productID === product.productID &&
    newObj.options.Color === product.options.Color
);

console.log(index);

Обновление 0

Сравните варианты, используя JSON.stringify()

const parsedCart = {
  id: 1592539903073,
  products: [
    {
      productID: 1001,
      name: "Test Product",
      qty: 1,
      options: {
        Color: "Red",
      },
    },
    {
      productID: 1002,
      name: "Test Product",
      qty: 1,
      options: {
        Color: "Red",
      },
    },
  ],
};

const newObj = {
  productID: 1002,
  name: "Test Product",
  qty: 1,
  options: {
    Color: "Red",
  },
};

const index = parsedCart.products.findIndex(
  (product) =>
    newObj.productID === product.productID &&
    JSON.stringify(newObj.options) === JSON.stringify(product.options)
);

console.log(index);
...