javascript - 通过特定元素将一个数组的元素排序为另外两个数组

标签 javascript arrays node.js

你好,我有一个数组,我是用 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)) {
      // ...
   }
}

总是使用冗长的名字。拥有 ipPatternMatcherpattern 甚至 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/

相关文章:

javascript - 如何使用 webpack 将 js 复制到 html 文件?

mysql - NodeJS MySQL 错误

node.js - 弹性对象内部的Elasticsearch搜索数组

javascript - 仅在全屏模式下显示页面滚动

javascript - mongodb 服务器端 javascript 实际上是客户端?

javascript - 溢出换行不会破坏动态添加的 div 上的单词

arrays - 在 Bash 中获取关联数组( double )部分的长度

javascript - 如何在 Javascript 中加载 KendoGrid 的最后一页?

php - 将字符串分解为嵌套数组

java - 如何从两个文本文件中读取数据并链接数据?