Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-比较具有相同字符串的两个数组_Javascript_Arrays_List_Compare - Fatal编程技术网

JavaScript-比较具有相同字符串的两个数组

JavaScript-比较具有相同字符串的两个数组,javascript,arrays,list,compare,Javascript,Arrays,List,Compare,我目前正在一个项目中工作,我需要比较这两个阵列,并过滤出具有相同房间名称的阵列 (例如,A420.2-0h 53米(从空置的-array)和A420.2(从预订的-array)) 过滤结果应如下所示: var filtered = [ A210.3 - 0h 53 m ,A510.4 - 0h 53 m ,A340.2 - 0h 53 m ,A450.1 - 1h 53 m ,A250.1 - 1h 53 m ,A520.7 - 2h 53 m ,A240.2 - 2h 53 m ,A440

我目前正在一个项目中工作,我需要比较这两个阵列,并过滤出具有相同房间名称的阵列

(例如,A420.2-0h 53米(从空置的-array)和A420.2(从预订的-array))

过滤结果应如下所示:

var filtered = [

 A210.3 - 0h 53 m
,A510.4 - 0h 53 m
,A340.2 - 0h 53 m
,A450.1 - 1h 53 m
,A250.1 - 1h 53 m
,A520.7 - 2h 53 m
,A240.2 - 2h 53 m
,A440.2 - 2h 53 m
,A450.3 - 4h 53 m
,A340.1 - 4h 53 m
,A320.6 - 4h 53 m
,A240.2 - 6h 53 m
,A240.4 - 6h 53 m];

// Filtered out: A250.1, A510.2, A210.2, A420.2, A350.1
我尝试过两种不同的方法,我从类似的问题中发现了这些方法,但我没有得到我想要的结果。比如,

function arr_diff (booked, vacant) {

    var a = [], diff = [];

    for (var i = 0; i < booked.length; i++) {
        a[booked[i]] = true;
    }

    for (var i = 0; i < vacant.length; i++) {
        if (a[vacant[i]]) {
            delete a[vacant[i]];
        } else {
            a[vacant[i]] = true;
        }
    }

    for (var k in a) {
        diff.push(k);
    }

    return diff;
};
我们这里有FRAMIA250.1-0h34mFRAMIA250.1-3h34m。在第一个名称(FRAMIA250.1-0h 34 m)到期之前,过滤掉第二个名称相同(FRAMIA250.1-3h 34 m)的最有效方法是什么

澄清;当时间到期时,它不再显示过滤数组中的元素。

使用
数组#filter()
数组#find()

var空置=[“A210.3-0h 53米”,“A510.2-0h 53米”,“A510.4-0h 53米”,“A340.2-0h 53米”,“A420.2-0h 53米”,“A450.1-1h 53米”,“A250.1-1h 53米”,“A520.7-2h 53米”,“A510.2-2h 53米”,“A240.2-2h 53米”,“A440.2-2h 53米”,“A350.1-4h 38米”,“A250.1-4h 53米”,“A450.3-4h 53米”,“A340.1-20-4h 53米”,“A310-53米”,“A240.2-6h 53米”、“A240.4-6h 53米”],
预订=[“A130.1”、“A420.6”、“A440.5”、“A540.1”、“A250.1”、“A350.1”、“A420.2”、“A510.2”、“A320.6”、“A320.7”、“A210.2”、“A220.3”];
var filtered=empty.filter(v=>!booked.find(b=>b===v.split('-')[0].trim());

console.log(已过滤);
使用
过滤器
包括
如下:

var空置=['A210.3-0h 53米'
,'A510.2-0h 53米'
,'A510.4-0h 53米'
,'A340.2-0h 53米'
,'A420.2-0h 53米'
,'A450.1-1h 53米'
,'A250.1-1h 53米'
,'A520.7-2h 53米'
,'A510.2-2h 53米'
,'A240.2-2h 53米'
,'A440.2-2h 53米'
,'A350.1-4h 38米'
,'A250.1-4h 53米'
,'A450.3-4h 53米'
,'A340.1-4h 53米'
,'A320.6-4h 53米'
,'A210.2-5h 38米'
,'A240.2-6h 53米'
[A240.4-6h 53米];
账面价值=['A130.1'
“A420.6”
“A440.5”
“A540.1”
“A250.1”
“A350.1”
“A420.2”
“A510.2”
,‘A320.6’
“A320.7”
“A210.2”
,'A220.3'];
var ans=空。过滤器(函数(v,i){
var-toSearch=v.split('-')[0].trim();
返回!已预订。包括(搜索);
});

console.log(ans);
我将首先创建一个ES6
集合
以加快查找速度,并将其用作过滤器回调的

const opening=[“A210.3-0h 53米”,“A510.2-0h 53米”,“A510.4-0h 53米”,“A340.2-0h 53米”,“A420.2-0h 53米”,“A450.1-1h 53米”,“A250.1-1h 53米”,“A520.7-2h 53米”,“A510.2-2h 53米”,“A240.2-2h 53米”,“A440.2-2h 53米”,“A350.1-4h 38米”,“A250.1-4h 53米”,“A450.3-4h 53米”,“A350.1-40.1-4h 53米”,“A320.5米”,“A36-4h 53米”,“A310-38米”,“A310-4h 53米”,“A350.5米”A240.2-6h 53米“,”A240.4-6h 53米“,
预订=[“A130.1”、“A420.6”、“A440.5”、“A540.1”、“A250.1”、“A350.1”、“A420.2”、“A510.2”、“A320.6”、“A320.7”、“A210.2”、“A220.3”]
过滤=空。过滤器(功能(v){
return!this.has(v.split('-')[0].trim())
},新订(已预订);
console.log(已过滤);

.as控制台包装{max height:100%!important;top:0;}
如果您基本上只想从空置中筛选出那些也在预订中的,如果我没有弄错的话:

function filterVacancies(vacant, booked) {
  return vacant.filter(function(vacancy){
    // now let's search in booked if some element "starts with" the room number
    return booked.some(function(booking){
      return vacancy.startsWith(booking);
    });
  })
}
var空闲=[
“A210.3-0h 53米”
,“A510.2-0h 53米”
,“A510.4-0h 53米”
,“A340.2-0h 53米”
,“A420.2-0h 53米”
,“A450.1-1h 53米”
,“A250.1-1h 53米”
,“A520.7-2h 53米”
,“A510.2-2h 53米”
,“A240.2-2h 53米”
,“A440.2-2h 53米”
,“A350.1-4h 38米”
,“A250.1-4h 53米”
,“A450.3-4h 53米”
,“A340.1-4h 53米”
,“A320.6-4h 53米”
,“A210.2-5h 38米”
,“A240.2-6h 53米”
,“A240.4-6h 53米];
var=[
“A130.1”
,“A420.6”
,“A440.5”
,“A540.1”
,“A250.1”
,“A350.1”
,“A420.2”
,“A510.2”
,“A320.6”
,“A320.7”
,“A210.2”
,“A220.3”];
var筛选=[];
对于(var i=0;i我会写:

var空闲=“A510.4-0 H 53 m”、“A310.4-0 H 53 m”、“A310.4-0 H 53 m”、“A340.2-0 H 53 m”、“A340.2-0 H 53 m”、“A420.2-0 0 H 53 m”、“A420.2-0.2-0 H 53 m”、“A420.2-0.3-0 H 53 m”、“A420.3-0-0 H 53 m”、“A420.3-0-0 H 53 m”、“A420.2-0.3-0-0 H 53 m”、“A420.3-0.3-0-0 H 53 m”、“A420.3-0.3-0.3-0 H 53 m”、“A420.2-0.3-0.3 m”、“A420.2-0.3-0.3-0.3-0.3-0 H 53 m”、“A420.2-0.3-0.3-0 H 53 m”、“A420.2-0-0.3-0 H 53 m”、“A420.10.2-5小时38米,'A240.2-6小时53米','A240。4-6h 53米']
var记账=['A130.1'、'A420.6'、'A440.5'、'A540.1'、'A250.1'、'A350.1'、'A420.2'、'A510.2'、'A320.6'、'A320.7'、'A210.2'、'A220.3']
var filtered=empty.filter(v=>!booked.includes(v.split(“-”[0]))

console.log(已过滤)
这些无效arrays@Weedoze我已将这些元素推送到这些数组中,booked.push(resource.code);您需要数组中的
吗?这是计算相似性的额外开销。
booked.includes(toSearch)错误:正确;
…别这样guy@Weedoze抱歉,没有收到您的请求?使用
返回相反的结果,而不是使用三元运算符
!booked.includes(toSearch)
-这就像编码
if(value==true)
@PankajShukla谢谢你的回答。如果可能的话,你也可以检查我的后续问题吗?@Destiny\u Coder\u 88抱歉,但你的后续问题对我来说不清楚。谢谢。这很好。如果可能的话,你也可以检查我的后续问题吗?@Destiny\u Coder\u 88你的后续问题完全不同。请关闭此问题接受我的答案,然后再提出另一个问题
FRAMIA250.1 - 0h 34 m
FRAMIA450.1 - 0h 34 m
FRAMIA240.2 - 1h 34 m
FRAMIA510.2 - 1h 34 m
FRAMIA440.2 - 1h 34 m
FRAMIA520.7 - 1h 34 m
FRAMIA350.1 - 3h 19 m
FRAMIA450.3 - 3h 34 m
FRAMIA340.1 - 3h 34 m
FRAMIA250.1 - 3h 34 m
FRAMIA320.6 - 3h 34 m
FRAMIA210.2 - 4h 19 m
FRAMIA240.4 - 5h 34 m
FRAMIA240.2 - 5h 34 m
function filterVacancies(vacant, booked) {
  return vacant.filter(function(vacancy){
    // now let's search in booked if some element "starts with" the room number
    return booked.some(function(booking){
      return vacancy.startsWith(booking);
    });
  })
}
var vacant= [
"A210.3 - 0h 53 m"
,"A510.2 - 0h 53 m"
,"A510.4 - 0h 53 m"
,"A340.2 - 0h 53 m"
,"A420.2 - 0h 53 m"
,"A450.1 - 1h 53 m"
,"A250.1 - 1h 53 m"
,"A520.7 - 2h 53 m"
,"A510.2 - 2h 53 m"
,"A240.2 - 2h 53 m"
,"A440.2 - 2h 53 m"
,"A350.1 - 4h 38 m"
,"A250.1 - 4h 53 m"
,"A450.3 - 4h 53 m"
,"A340.1 - 4h 53 m"
,"A320.6 - 4h 53 m"
,"A210.2 - 5h 38 m"
,"A240.2 - 6h 53 m"
,"A240.4 - 6h 53 m"];

var booked = [
"A130.1"
,"A420.6"
,"A440.5"
,"A540.1"
,"A250.1"
,"A350.1"
,"A420.2"
,"A510.2"
,"A320.6"
,"A320.7"
,"A210.2"
,"A220.3"];

var filtered = [];

for(var i=0;i<vacant.length;i++){
 var found = false;
 for(var x=0;x<booked.length;x++){
  if(vacant[i].indexOf(booked[x]) > -1){
    found = true;
  }
 }
if(!found){
    filtered.push(vacant[i]);
}
}
var result="";
for(var y=0;y<filtered.length;y++){
 result += filtered[y] + "\n<BR>";
}
 document.getElementById("demo").innerHTML = result;
}