尝试匹配两个数组中的值,只有在部分值完全匹配时才删除

1 javascript arrays string-matching node.js

我收到两个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);
Run Code Online (Sandbox Code Playgroud)

Sab*_*bir 8

使用干净的方法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);
Run Code Online (Sandbox Code Playgroud)