Как объединить одинаковые элементы в массиве с помощью прокси?

#javascript #arrays #object #proxy #include

#javascript #массивы #объект #прокси #включить

Вопрос:

У меня есть 2 таких объекта:

 var customerA = {firstName: "Dravid, Tendulkar"},
    customerB = {firstName: "Virendra, Virat, Tendulkar"};
 

Я хочу найти одинаковые имена из этих строк и объединить их с помощью Proxy , но я не могу пойти дальше, чем это:

 var customerA = {firstName: "Dravid, Tendulkar"},
    customerB = {firstName: "Virendra, Virat, Tendulkar"};

var proxyMerge = new Proxy([customerA, customerB], {
  get: (target, keyName) => {
    let arr = target.map(item => item[keyName]);
    let output = arr.filter(item => arr[item] == arr.includes(item)); // returns an empty array.
    return output;
  }
})

var customers = proxyMerge.firstName;
console.log(customers); // the output should be: ["Dravid, Tendulkar, Virendra, Virat"] 
 

Как я могу получить полный массив, не имеющий одинаковых имен?

Комментарии:

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

2. @Bergi Ты прав, но все же просто для практики. Способ использования прокси, подобный этому, более понятен для меня, чтобы привыкнуть к его концепции.

Ответ №1:

Объединить результаты из map функции. В результате у вас будет две строки, поэтому для этого нужно объединить их в одну строку, а затем разделить их обратно на один массив.

Затем используйте Set объект для фильтрации любых дубликатов. A Set может содержать только уникальные значения, поэтому любой дубликат не будет добавлен в набор. Затем с помощью оператора spread ... превратите Set back в массив и верните его в качестве вывода.

Теперь у вас будет массив без каких-либо повторяющихся значений.

 var customerA = {firstName: "Dravid, Tendulkar"},
    customerB = {firstName: "Virendra, Virat, Tendulkar"};

var proxyMerge = new Proxy([customerA, customerB], {
  get: (target, keyName) => {
    let names = target.map(item => item[keyName]);
    let combined = names.join(', ').split(', ');
    let output = [...new Set(combined)];
    return output;
  }
})

var customers = proxyMerge.firstName;
console.log(customers); // the output should be: ["Dravid, Tendulkar, Virendra, Virat"] 

Комментарии:

1. Сумасшедший. Я не знал, что ключевое Set слово можно использовать отдельно, как это. Большое вам спасибо.

2. Set это не совсем (просто) ключевое слово; тип set гарантирует равенство значений ; и поскольку типы set являются итеративными и, как показано в приведенном выше примере, его нужно было использовать вместе с синтаксисом Spread или, например Array.from(new Set(combined)) .