Проблема Итерации по объекту глубокого уровня в JavaScript - PullRequest
0 голосов
/ 10 октября 2019

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

, пожалуйста, предложите любой другой оптимизированный способесли возможно. Я новичок в JavaScript, поэтому извините за любые глупые ошибки Заранее спасибо.

enter image description here

Ответы [ 3 ]

1 голос
/ 10 октября 2019

Вы можете сделать это, используя concat, Set и Array.from:

const object1 = { products: ['1', '2', '3'] }
const object2 = { products: ['1', '2', '3', '4'] }
const object3 = { products: ['5'] }

// Merge all the products in one Array
const products = object1.products
  .concat(object2.products)
  .concat(object3.products);

// Create a Set, with the unique products
const set = new Set(products);

// Convert the Set to an Array
const uniqueProducts = Array.from(set);

console.log(uniqueProducts)
0 голосов
/ 10 октября 2019

Есть много способов достичь этого:

  1. Вы можете использовать фильтр для удаления дублирующихся элементов:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter, считывая значение, егоиндекс и массив в функции фильтра

ссылка для быстрого поиска: https://codeburst.io/javascript-array-distinct-5edc93501dc4

вы всегда можете написать метод для слияния, который был бы хорош с точки зрения обработки ошибок, проверок угловых случаев, чтобы вышеуказанное действие не приводило к ошибке, например:

function MergeUniqueProductFromDictToArry(fromDict, productKey, toArray) {
  //check if for the array in which we need to merge
  if(!toArray) {
    toArray = [];
  }
  //check for validity
  if(!fromDict || !productKey || !fromDict[productKey] || fromDict[productKey].length == 0) {
    return toArray;
  }  
  for(var ix in fromDict[productKey]) {
    //check if product already exist
    if(toArray.indexOf(fromDict[productKey][ix]) === -1) {
      toArray.push(fromDict[productKey][ix]);
    }
  }
  return toArray;
}
var object1 = {products: ["p1", "p2", "p1"]};
var object2 = {products: ["p3", "p2"]};
var object3 = {products: ["p4", "p2"]};
var uniqueProducts = MergeUniqueProductFromDictToArry(object1, "products", null);
uniqueProducts = MergeUniqueProductFromDictToArry(object2, "products", uniqueProducts);
uniqueProducts = MergeUniqueProductFromDictToArry(object3, "products", uniqueProducts);
console.log(uniqueProducts);
0 голосов
/ 10 октября 2019

Для удаления дубликатов вы можете использовать Set, он сохраняет все элементы уникальными, а затем вы можете привести его к Array.

Array.from(new Set(array))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...