你好,我有一个数组,我是用 txt 文件制作的。数组的每个元素都是这样的:
examplea A 10.20.5.197
exampleb A 10.10.7.178
examplec A 10.20.75.116
exampled A 10.20.90.170
我想遍历原始数组以找到所有“/10.20.\d+.\d+/”的 ip 地址,并将它们存储在另一个数组 (wifiArray) 中,并将其余部分存储在另一个数组 (localArray) 中。 这是我到目前为止得到的:
var fs = require('fs');
var lineArray =
fs.readFileSync('C:/Users/intern3/zonerecords.txt').toString().split("\n");
var IP = /10.20\d+.\d+/;
var wifiArray = new Array();
var localArray = new Array();
function ArraySplit(string, Originalarray, Array1, Array2) {
var ind = 0;
for( var i=0; i < Originalarray.length; i++) {
if(String(string).match(Originalarray[i])) {
Array1[ind++] = Originalarray[i];
}
else {
Array2[ind++] = Originalarray[i];
}
}
}
ArraySplit(IP, lineArray, wifiArray, localArray);
fs.writeFile('C:/Users/intern3/test2.txt', wifiArray, function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
fs.writeFile('C:/Users/intern3/test3.txt', localArray, function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
fs.writeFile('C:/Users/intern3/test.txt', lineArray, function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
如果我运行这个 test2.txt 只会打印一面 ,,,,,,,,,,,, test3.txt 打印原始数组。 我做错了什么?
最佳答案
好的,找到你的问题了。您正在错误地命名(并使用!)您的变量;而且您的模式不正确。尝试 var IP =/10\.20\.\d+\.\d+/;
你有:
function ArraySplit(string, Originalarray, Array1, Array2) {
// ...
// This is WRONG, as string is a PATTERN to be matched
//if(String(string).match(Originalarray[i])) {
// Now it is correct more or less
if(String(Originalarray[i]).match(string)) {
// ...
}
}
总是使用冗长的名字。拥有 ipPatternMatcher
与 pattern
甚至 string
对于topic的问题,可以使用reducer
const orig = [{
a: "examplea",
b: "A",
ip: "10.20.5.197"
},
{
a: "exampleb",
b: "A",
ip: "10.10.7.178"
},
{
a: "examplec",
b: "A",
ip: "10.20.75.116"
},
{
a: "exampled",
b: "A",
ip: "10.20.90.170"
}
]
var IPPattern = /^10\.20\.\d{1,3}\.\d{1,3}$/;
const accumulator = {wifiAddresses: [], localAddresses: []};
const reducer = (accumulator, value) => {
if (value.ip.match(IPPattern)) {
accumulator.wifiAddresses.push(value);
} else {
accumulator.localAddresses.push(value);
}
return accumulator;
}
console.log(orig.reduce(reducer, accumulator))
我会尝试找到您遇到问题的地方,但您似乎在使用正则表达式和未转义点时出错
关于javascript - 通过特定元素将一个数组的元素排序为另外两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467713/