Javascript,整合数组元素

时间:2015-11-07 03:56:10

标签: javascript arrays

我很难找到合并数组元素的方法。

所以我的数组格式为 [id1:port1,id2:port2,id1:port3,id2:port4,id5:port5 ...] ,其中每个元素有2个部分。 id部分不是唯一的。我试图整合的是创建一个新的数组将有 [id1#port1:port3,id2#port2:port4,id5#port5]

等数据

我尝试过下面的代码,但它并没有让我走得太远。任何大师能帮助我吗?



var orinString = "id1:port1,id2:port2,id1:port3,id2:port4,id5:port5";

var newArray1 = orinString.split(",");
var newArray2 = orinString.split(",");
var newArray3 = [];

for (x=0; x<=newArray1.length-1; x++) {
  for (y=0; y<= newArray2.length-1; y++) {
    if ((newArray1[x].split(":")[0] == newArray2[y].split(":")[0]) && (newArray1[x].split(":")[1] != newArray2[y].split(":")[1])) {
      newArray3.push(newArray1[x].split(":")[0] +"#"+ newArray1[x].split(":")[1]);
    }
  }
}

for (z=0; z<=newArray3.length; z++) {
  gs.log("show me the result " +newArray3[z]);
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

是你想要的:

var orinString = "id1:port1,id2:port2,id1:port3,id2:port4,id5:port5";
var arr1 = orinString.split(",");
var temp= ""; 
var newStr = "";
arr1.sort();
for(i=0; i< arr1.length; i++) {
    var item = arr1[i].split(':');
    if(item[0] !== temp || temp === "") {
        newStr += "," + item[0] + "#" + item[1];
    } else {
        newStr += ":"+item[1];
    }
    temp = item[0];
}
console.log(newStr.substring(1));

答案 1 :(得分:0)

解决此类问题的典型方法是

  • 将它们转换为可行的值
  • 填充某种查找表
  • 输出此查找表的结果

例如

var orinString = "id1:port1,id2:port2,id1:port3,id2:port4,id5:port5";

var idsAndPorts = orinString.split(",");

// Populate a key lookup
var hashTable = {};
idsAndPorts.forEach(function(s) {
  var splitValue = s.split(':');
  var key = splitValue[0];
  var value = splitValue[1];
  if(hashTable[key]) {
    hashTable[key].push(value);
  } else {
    hashTable[key] = [value];
  }
});

// Now convert it back into an array again
var finalArray = [];
for(var k in hashTable) {
  finalArray.push(k + '#' + hashTable[k].join(','));
}

// View the results
finalArray.forEach(function(f) {
  console.log(f);
})

这并不保证最终的数组会被排序,但如果您愿意,可以自己排序。