2017-05-09 56 views
0

我试图比较两个包含相似字符串的数组的结果;JavaScript - 使用类似对象过滤两个数组

数组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 

所以我需要从过滤掉A350.1 - 2h 46 m数组1因为在一个类似的对象A350.1 - 1h 45 m数组2

结果应该是这样的,从经滤波的阵列,仅去除其具有相同名称的对象(在此实例中A350.1):

​​

任何办法可以有效地做到这一点,并推入一个结果新的过滤数组?

+0

它是一个字符串数组? '[“A350.1 - 2h 46 m”,“A210.2 - 3h 46 m”]'?或具有'objects'的数组?你可以在Javascript中写下确切的数组吗? – sabithpocker

+0

@sabithpocker我将这些对象从JSON响应推送到空数组(Array1,Array2)。 – IlariM

+0

所以如果有冲突,总是采用'array2'中的项目?你能解释一下你在这里做什么吗? – sabithpocker

回答

2

试试这个:

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)

0

做一个循环,数组1的每个值进行比较对数组2的每个值,并分割你的字符串,像这样array1[i].split("-");只比较你的字符串

0

的第一部分,通过分离掉有趣的一点

准备好您的查找数组
var arr2_prepared = arr2.map(x => x.split(' - ')[0]); 

然后过滤掉来自所述数据阵列不具有自己的串的第一部分中的查找数组中的元素

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