使用jQuery从某些条件中删除数组中的特定值

时间:2017-02-11 13:40:27

标签: jquery arrays unique

我有以下数组

    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"]

2 个答案:

答案 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)