2017-05-10 32 views
1

我目前正在研究一个代码,我需要比较两个数组并删除具有相同名称的多个元素。这里是数组;这两个阵列之间JavaScript - 删除两个数组之间的多个相同的值

vacant = [ 
"FRAMIA420.2 - 0h 36 m", 
"FRAMIA510.4 - 0h 36 m", 
"FRAMIA320.7 - 0h 36 m", 
"FRAMIA520.7 - 0h 36 m", 
"FRAMIA450.3 - 1h 36 m", 
"FRAMIA350.1 - 2h 21 m", 
"FRAMIA210.2 - 2h 21 m", 
"FRAMIA340.2 - 2h 36 m"] 

booked = [ 
"FRAMIA440.5 - 13h 0 m", 
"FRAMIA540.2 - 3h 45 m", 
"FRAMIA340.2 - 5h 45 m", 
"FRAMIA250.1 - 3h 45 m", 
"FRAMIA420.2 - 3h 45 m", 
"FRAMIA540.1 - 13h 0 m", 
"FRAMIA520.5 - 3h 45 m", 
"FRAMIA240.4 - 3h 45 m", 
"FRAMIA510.2 - 7h 0 m", 
"FRAMIA510.4 - 2h 45 m", 
"FRAMIA520.7 - 2h 45 m", 
"FRAMIA450.1 - 1h 45 m", 
"FRAMIA450.3 - 2h 0 m"] 

所以相似的元件是:FRAMIA420.2,FRAMIA510.4,FRAMIA520.7,FRAMIA450.3FRAMIA340.2

我已经过滤了元素的timestamp部分,所以我只需要比较名称部分;

var firstPart = []; 
vacant.forEach(function (obj1) { 
    firstPart.push(obj1.substring(0, obj1.indexOf('-'))) 
}); 
booked.forEach(function (obj2) { 
    var c = firstPart.indexOf(obj2.substring(0, obj2.indexOf('-'))); 
}); 

最后的结果应该是这样的,只留下vacant - 阵列,这同booked -array没有相似之处里面的元素:

FRAMIA320.7 - 0h 36 m 
FRAMIA350.1 - 2h 21 m 
FRAMIA210.2 - 2h 21 m 

注意阵列之间的相似性变化每天,有时可能有2个相似的元素,其他日子可能有8个或更多。

任何快速有效的方法来做到这一点?

回答

2

您可以构建的所有名称的列表booked数组,然后遍历空数组,检查名称是否在预定名称列表中。

vacant = [ 
 
    "FRAMIA420.2 - 0h 36 m", 
 
    "FRAMIA510.4 - 0h 36 m", 
 
    "FRAMIA320.7 - 0h 36 m", 
 
    "FRAMIA520.7 - 0h 36 m", 
 
    "FRAMIA450.3 - 1h 36 m", 
 
    "FRAMIA350.1 - 2h 21 m", 
 
    "FRAMIA210.2 - 2h 21 m", 
 
    "FRAMIA340.2 - 2h 36 m" 
 
] 
 

 
booked = [ 
 
    "FRAMIA440.5 - 13h 0 m", 
 
    "FRAMIA540.2 - 3h 45 m", 
 
    "FRAMIA340.2 - 5h 45 m", 
 
    "FRAMIA250.1 - 3h 45 m", 
 
    "FRAMIA420.2 - 3h 45 m", 
 
    "FRAMIA540.1 - 13h 0 m", 
 
    "FRAMIA520.5 - 3h 45 m", 
 
    "FRAMIA240.4 - 3h 45 m", 
 
    "FRAMIA510.2 - 7h 0 m", 
 
    "FRAMIA510.4 - 2h 45 m", 
 
    "FRAMIA520.7 - 2h 45 m", 
 
    "FRAMIA450.1 - 1h 45 m", 
 
    "FRAMIA450.3 - 2h 0 m" 
 
] 
 

 
function getName(str) { 
 
    return str.substring(0, str.indexOf('-')); 
 
} 
 

 
var bookedNames = []; 
 
booked.forEach(function (bookedStr) { 
 
    bookedNames.push(getName(bookedStr)) 
 
}); 
 

 
var uniqueVacant = []; 
 
vacant.forEach(function (vacantStr) { 
 
    var vacantName = getName(vacantStr); 
 
    if (!bookedNames.includes(vacantName)) 
 
    uniqueVacant.push(vacantStr) 
 
}); 
 
console.log(uniqueVacant);

+2

谢谢!这很好。 – IlariM

1

你需要2个循环,每个阵列,并比较每个阵列的字符串的第一部分,像这样:

vacant = [ 
"FRAMIA420.2 - 0h 36 m", 
"FRAMIA510.4 - 0h 36 m", 
"FRAMIA320.7 - 0h 36 m", 
"FRAMIA520.7 - 0h 36 m", 
"FRAMIA450.3 - 1h 36 m", 
"FRAMIA350.1 - 2h 21 m", 
"FRAMIA210.2 - 2h 21 m", 
"FRAMIA340.2 - 2h 36 m"] 

booked = [ 
"FRAMIA440.5 - 13h 0 m", 
"FRAMIA540.2 - 3h 45 m", 
"FRAMIA340.2 - 5h 45 m", 
"FRAMIA250.1 - 3h 45 m", 
"FRAMIA420.2 - 3h 45 m", 
"FRAMIA540.1 - 13h 0 m", 
"FRAMIA520.5 - 3h 45 m", 
"FRAMIA240.4 - 3h 45 m", 
"FRAMIA510.2 - 7h 0 m", 
"FRAMIA510.4 - 2h 45 m", 
"FRAMIA520.7 - 2h 45 m", 
"FRAMIA450.1 - 1h 45 m", 
"FRAMIA450.3 - 2h 0 m"] 

for(i=0;i<vacant.length;i++) { 
    item1 = vacant[i].split('-')[0]; 
    for(j=0;j<booked.length;j++) { 
     item2 = booked[j].split('-')[0]; 
     if(item1===item2) { 
       console.log('item number '+i+' in vacant is the same as item number '+j+' in booked'); 
     } 
    } 
} 

https://jsfiddle.net/48hef0cz/

1

试试这个:

var vacant = [ 
 
"FRAMIA420.2 - 0h 36 m", 
 
"FRAMIA510.4 - 0h 36 m", 
 
"FRAMIA320.7 - 0h 36 m", 
 
"FRAMIA520.7 - 0h 36 m", 
 
"FRAMIA450.3 - 1h 36 m", 
 
"FRAMIA350.1 - 2h 21 m", 
 
"FRAMIA210.2 - 2h 21 m", 
 
"FRAMIA340.2 - 2h 36 m"]; 
 

 
var booked = [ 
 
"FRAMIA440.5 - 13h 0 m", 
 
"FRAMIA540.2 - 3h 45 m", 
 
"FRAMIA340.2 - 5h 45 m", 
 
"FRAMIA250.1 - 3h 45 m", 
 
"FRAMIA420.2 - 3h 45 m", 
 
"FRAMIA540.1 - 13h 0 m", 
 
"FRAMIA520.5 - 3h 45 m", 
 
"FRAMIA240.4 - 3h 45 m", 
 
"FRAMIA510.2 - 7h 0 m", 
 
"FRAMIA510.4 - 2h 45 m", 
 
"FRAMIA520.7 - 2h 45 m", 
 
"FRAMIA450.1 - 1h 45 m", 
 
"FRAMIA450.3 - 2h 0 m"]; 
 

 
vacant = vacant.filter(function (element) { 
 
    var roomName = element.split('-')[0]; 
 
    
 
    var index = booked.findIndex(function (booking) { 
 
    return roomName === booking.split('-')[0]; 
 
    }); 
 
    
 
    return index == -1; 
 
}); 
 

 
console.log(vacant);

1

您可以使用字典来跟踪唯一值的。

vacant = [ 
 
"FRAMIA420.2 - 0h 36 m", 
 
"FRAMIA510.4 - 0h 36 m", 
 
"FRAMIA320.7 - 0h 36 m", 
 
"FRAMIA520.7 - 0h 36 m", 
 
"FRAMIA450.3 - 1h 36 m", 
 
"FRAMIA350.1 - 2h 21 m", 
 
"FRAMIA210.2 - 2h 21 m", 
 
"FRAMIA340.2 - 2h 36 m"] 
 

 
booked = [ 
 
"FRAMIA440.5 - 13h 0 m", 
 
"FRAMIA540.2 - 3h 45 m", 
 
"FRAMIA340.2 - 5h 45 m", 
 
"FRAMIA250.1 - 3h 45 m", 
 
"FRAMIA420.2 - 3h 45 m", 
 
"FRAMIA540.1 - 13h 0 m", 
 
"FRAMIA520.5 - 3h 45 m", 
 
"FRAMIA240.4 - 3h 45 m", 
 
"FRAMIA510.2 - 7h 0 m", 
 
"FRAMIA510.4 - 2h 45 m", 
 
"FRAMIA520.7 - 2h 45 m", 
 
"FRAMIA450.1 - 1h 45 m", 
 
"FRAMIA450.3 - 2h 0 m"] 
 

 
vacantDict = {}; 
 

 
vacant.forEach(function(val) { 
 
    var name = val.split(' - ')[0]; 
 
    vacantDict[name] = val; 
 
}); 
 

 
booked.forEach(function(val) { 
 
    var name = val.split(' - ')[0]; 
 
    if (vacantDict[name] !== undefined) { 
 
    delete vacantDict[name]; 
 
    } 
 
}); 
 

 
newVacantList = []; 
 
for (var name in vacantDict) { 
 
    newVacantList.push(vacantDict[name]); 
 
} 
 

 
console.log(newVacantList);

相关问题