2016-08-21 60 views
1

我收到两个IP地址阵列,这些阵列的格式不同。应该从地址数组中删除IP数组中的任何值 - 但只有在IP匹配完全相同的情况下。我写了下面,但问题是,例如,192.168.0.1将匹配192.168.0.11,然后从地址数组中删除192.168.0.11,这是不是一个有效的结果。地址数组需要以与接收到的格式相同的格式返回。请帮忙吗? :)尝试匹配两个数组中的值,并且只在部分值存在完全匹配时才删除

var addresses = [{ 
    Value : '192.168.0.11' 
}, { 
    Value : '52.210.29.181' 
}, { 
    Value : '52.210.128.97' 
} 
]; 

var IPs = ['192.168.0.1', '52.210.128.97']; 

console.log('Before:', addresses); 

for (var x = 0; x < IPs.length; x++) { 

for (var key in addresses) { 
    var address = JSON.stringify(addresses[key]); 

    if (address.indexOf(IPs[x]) > -1){ //if the IP is a substr of address 

     console.log('matched, so delete', addresses[key]); 
     var index = addresses.indexOf(addresses[key]); //find the index of IP to be deleted then delete it 
     addresses.splice(index, 1); 

    } 


} 
} 

console.log('After', addresses); 
+0

地址是你似乎是治疗对象的字符串数组的字符串。尝试地址==(或可能是===)IP [x]是否合乎逻辑? –

回答

9

使用清洁方法Array.filter

var addresses = [{ 
 
     Value: '192.168.0.11' 
 
     }, 
 
     { 
 
     Value: '52.210.29.181' 
 
     }, { 
 
     Value: '52.210.128.97' 
 
    }]; 
 
    
 
    var IPs = ['192.168.0.1', '52.210.128.97']; 
 
    
 
    var filterdAddresses = addresses.filter(function (item) { 
 
     var match = false; 
 
     IPs.forEach(function (ip) { 
 
      if (item.Value == ip) { 
 
       match = true; 
 
      } 
 
    
 
     }); 
 
     return !match; 
 
    
 
    }); 
 
    
 
    console.log(filterdAddresses);

+0

超级 - 谢谢 – user1439488

+0

伟大的做法。 –

1

我提出一个foreach和剪接这样的:

addresses.forEach((item, index, arr) => {if (IPs.indexOf(item.Value) != -1) arr.splice(index,1)}); 

console.log(addresses); //[ { Value: '192.168.0.11' }, { Value: '52.210.29.181' } ] 
-1

使用类似

var res = []; 

var addresses = [{ 
    Value : '192.168.0.11' 
}, { 
    Value : '52.210.29.181' 
}, { 
    Value : '52.210.128.97' 
}]; 

var IPs = ['192.168.0.1', '52.210.128.97']; 

console.log('Before:', addresses); 

addresses.forEach(function(addr) { 
    IPs.forEach(function(ip) { 
    if (addr.Value === ip) res.push(addr); 
    }); 
}); 

console.log('After', res);  

在水库将只得到

{ Value: '52.210.128.97' } 
0

如下我会做这个工作;

var ips = ['192.168.0.1', '52.210.128.97'], 
 
addresses = [{Value : '192.168.0.11'}, 
 
      {Value : '52.210.29.181'}, 
 
      {Value : '52.210.128.97'} 
 
      ], 
 
    result = addresses.map(obj => obj.Value) 
 
        .filter(ip => !ips.includes(ip)); 
 
console.log(result);

0

var addresses = [{ 
 
    Value: '192.168.0.11' 
 
}, { 
 
    Value: '52.210.29.181' 
 
}, { 
 
    Value: '52.210.128.97' 
 
}]; 
 

 
var IPs = ['192.168.0.1', '52.210.128.97']; 
 

 

 
// Loop through IPs 
 
IPs_loop: 
 
for (var ipIndex = 0; ipIndex < IPs.length; ipIndex++) { 
 

 
    var currentIP = IPs[ipIndex]; 
 

 
    // loop through addresses 
 
    for (var adsIndex = 0; adsIndex < addresses.length; adsIndex++) { 
 

 
     var currentAds = addresses[adsIndex]; 
 
     if (currentAds.Value == currentIP) { 
 
      removeAddressFromIndex(adsIndex); 
 
      break IPs_loop; 
 
     } 
 
    } // end of addresses Loop 
 

 
} // end of IPs Loop 
 

 
function removeAddressFromIndex(theReceivedIndex) { 
 
    addresses.splice(theReceivedIndex, 1); 
 
} 
 

 
console.log(addresses);


(关于 IPs_loop(标签和语句))

0

该解决方案是比别人更有效。

var addresses = [{ 
 
    Value : '192.168.0.11' 
 
}, { 
 
    Value : '52.210.29.181' 
 
}, { 
 
    Value : '52.210.128.97' 
 
} 
 
]; 
 

 
var IPs = ['192.168.0.1', '52.210.128.97']; 
 

 
var obj = {}; 
 
addresses.forEach(function(a, i) { obj[a.Value] = i; }); 
 
IPs.forEach(function(i) { if (obj[i] != null) addresses.splice(obj[i],1); }); 
 

 
console.log(addresses);

0

次要更新到@ Sabbir的做法:

var addresses = [ 
 
    { 
 
     Value: '192.168.0.11' 
 
    }, 
 
    { 
 
     Value: '52.210.29.181' 
 
    }, 
 
    { 
 
     Value: '52.210.128.97' 
 
    }]; 
 
    
 
var IPs = ['192.168.0.1', '52.210.128.97']; 
 

 
var filterdAddresses = addresses.filter(function (item) { 
 
    // If the value exists in IPs array, indexOf will return the index of that value, otherwise it will return -1 
 
    // And if it returns -1 then it didn't match so we return 'true', as we won't filter/remove it 
 
    return (IPs.indexOf(item.Value) == -1);  
 
}); 
 
    
 
console.log(filterdAddresses); //[ { Value: '192.168.0.11' }, { Value: '52.210.29.181' } ]

相关问题