#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))
.