【问题标题】:JavaScript - Filter two arrays with similar objectsJavaScript - 过滤两个具有相似对象的数组
【发布时间】:2017-05-09 10:24:06
【问题描述】:

我正在尝试比较两个包含相似字符串的不同数组的结果;

数组1:

A350.1 - 2h 46 m
A210.2 - 3h 46 m

数组2:

A450.3 - 8h 0 m
A440.5 - 13h 0 m
A450.1 - 4h 0 m
A350.1 - 1h 45 m
A320.7 - 3h 45 m

所以我需要从 Array1 中过滤掉 A350.1 - 2h 46 m,因为在 Array2

中有一个类似的对象 A350.1 - 1h 45 m

过滤后的数组的结果应该是这样的,只删除具有相同名称的对象(在本例中为A350.1):

A210.2 - 3h 46 m

我有什么方法可以有效地做到这一点并将结果推送到一个新的过滤数组中?

【问题讨论】:

  • 是字符串数组吗? ["A350.1 - 2h 46 m", "A210.2 - 3h 46 m"]?或带有objects 的数组?你能用 Javascript 在此处写下确切的数组吗?
  • @sabithpocker 我正在将这些对象从 JSON 响应推送到一个空数组(Array1、Array2)。
  • 所以如果有冲突,来自array2的项目总是被拿走?你能解释一下你想在这里做什么吗?

标签: javascript arrays compare


【解决方案1】:

试试这个:

var arr1 = ["A350.1 - 2h 46 m", "A210.2 - 3h 46 m"]
var arr2 = ["A450.3 - 8h 0 m",
  "A440.5 - 13h 0 m",
  "A450.1 - 4h 0 m",
  "A350.1 - 1h 45 m",
  "A320.7 - 3h 45 m"
]
var firstPart = [];
arr1.forEach(function(obj1) {
  firstPart.push(obj1.substring(0, obj1.indexOf('-')))
});
arr2.forEach(function(obj2) {
  var i = firstPart.indexOf(obj2.substring(0, obj2.indexOf('-')));
  if (i !== -1)
    arr1.splice(i, 1);
});
console.log(arr1)

【讨论】:

    【解决方案2】:

    创建一个循环,将 Array1 的每个值与 Array2 的每个值进行比较,然后像 array1[i].split("-"); 那样拆分字符串,只比较字符串的第一部分

    【讨论】:

      【解决方案3】:

      通过拆分有趣的位来准备查找数组

      var arr2_prepared = arr2.map(x => x.split(' - ')[0]);
      

      然后从数据数组中过滤掉查找数组中没有其字符串的第一部分的元素

      var result = arr1.filter(x => arr2_prepared.indexOf(x.split(' - ')[0]) === -1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        • 2022-12-04
        • 1970-01-01
        • 2021-07-05
        相关资源
        最近更新 更多