我有以下数组
var myArr = [
"01;#Sion",
"02;#Sion",
"03;#Mumbai",
"04;#Mumbai",
"05;#Kolkata",
"06;#Kolkata",
"07;#Chennai",
"08;#Chennai"
];
我需要在数组中输出:
["01;#Sion", "03;#Mumbai", "05;#Kolkata", "07;#Chennai"]
它应该只在;#
之后选择唯一值。
对于Sion,输出可以是"01;#Sion"
或"02;#Sion"
。
其中任何一个都没问题。
这是我到目前为止所尝试的:
var myArr = ["01;#Sion", "02;#Sion", "03;#Mumbai", "04;#Mumbai", "05;#Kolkata", "06;#Kolkata", "07;#Chennai", "08;#Chennai"];
var newArr = [];
for (j = 0; j < myArr.length; j++) {
newArr.push(myArr[j].split(";#")[1]);
}
newArr = NWF$.unique(newArr);
console.log(newArr); // -> ["Chennai", "Kolkata", "Mumbai", "Sion"]
答案 0 :(得分:1)
这是你的解决方案配偶,
var myArr = ["01;#Sion", "02;#Sion", "03;#Mumbai", "04;#Mumbai", "05;#Kolkata", "06;#Kolkata", "07;#Chennai", "08;#Chennai"];
var newArr = [];
var tempArr = [];
for (j = 0; j < myArr.length; j++) {
newArr.push(myArr[j].split(";#") [1]);
tempArr.push(myArr[j]);
}
var temp = '';
var result = [];
for(i=0;i<newArr.length;i++){
if(temp == '' || temp != newArr[i]){
temp = newArr[i];
result.push(tempArr[i]);
}
}
console.log(result);
这是有效的jsfiddle
尝试一下,它会起作用。
答案 1 :(得分:1)
执行此类操作的最简单方法之一是创建一个临时对象,其中属性名称是您要比较的值。
对于您的情况,如果某个属性尚不存在,则添加它,否则您会跳过它
一旦对象完成,迭代它的所有属性以创建新数组
var myArr = [
"01;#Sion",
"02;#Sion",
"03;#Mumbai",
"04;#Mumbai",
"05;#Kolkata",
"06;#Kolkata",
"07;#Chennai",
"08;#Chennai"
];
var tmp = {};
myArr.forEach(function(el) {
var city = el.split('#')[1];
if (!tmp[city]) {
tmp[city] = el;
}
});
console.log('tmp', tmp);
var newArr = Object.keys(tmp).map(function(key) {
return tmp[key];
});
console.log('newArr', newArr)