【问题标题】:How to merge the same items in the array using proxy?如何使用代理合并数组中的相同项目?
【发布时间】:2021-03-07 06:40:20
【问题描述】:

我有 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"] 

我怎样才能得到一个没有相同名称的完整数组?

【问题讨论】:

  • 我完全没有理由在这里使用代理。只需创建一个新的普通对象并在其中存储数组,您可以从所有属性的循环中填充数组。
  • @Bergi 你是对的,但仍然只是为了练习。像这样使用代理的方式让我习惯了它的概念更容易理解。

标签: javascript arrays object proxy include


【解决方案1】:

合并来自map 函数的结果。结果你会得到两个字符串,所以将它们连接到一个字符串,然后将它们拆分回一个数组应该可以做到这一点。

然后使用Set 对象过滤掉所有重复项。 Set 只能包含唯一值,因此不会将任何重复值添加到集合中。然后使用扩展运算符...Set 转换回数组并将其作为输出返回。

现在您将拥有一个没有任何重复值的数组。

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"]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
相关资源
最近更新 更多