使用split函数输出不同的值

时间:2013-09-11 12:12:30

标签: javascript jquery

我有以下数组:

var fruits = ["orange","orange,apple","apple,orange,pear"];

我正在努力实现以下目标:

fruits = ["orange","apple","pear"]

任何建议,谢谢!

7 个答案:

答案 0 :(得分:4)

这是一种方法:

fruits = fruits.reduce(function (p, c) {
    return p.concat(c.split(","));
}, []).filter(function(e, i, a) {
    return a.indexOf(e) === i;
});

(编辑:请注意,IE8或更早版本不支持.filter().reduce(),但如果您需要支持较旧的IE,则可以使用填充程序。)

答案 1 :(得分:0)

没有现成的方法来实现这一目标。

你可以做的是使用像词典一样的关联数组。遍历列表,读取每个元素,将其拆分并将其存储在关联数组中,其中键作为水果名称,值也作为水果名称。类似的东西:

fruits["orange"] = "orange";

如果fruits []中已经存在该值,则只会被覆盖。最后,你将拥有尽可能多的水果[]钥匙和独特的水果。

编辑:

var fruits = ["orange", "orange,apple", "apple,orange,pear"];
var a = fruits.toString().split(",");
var obj = new Object();
for (var i = 0; i < a.length; i++) {
    obj[a[i]] = a[i];
}
for (var key in obj) {
  alert(key);
}

答案 2 :(得分:0)

会给你预期的结果。

var fruits = ["orange","orange,apple","apple,orange,pear"];
var uniqueVal = [];
$.each(fruits, function(i, el){
    var splitVals = el.split(',');
    for(var i=0; i<splitVals.length; i++ ){
        if($.inArray(splitVals[i], uniqueVal) === -1) uniqueVal.push(splitVals[i]);
    }
});

答案 3 :(得分:0)

试试这个

 var fruits = ["orange","orange,apple","apple,orange,pear"];

如果你想拆分第二个元素并连接字符串

fruits.concat(fruits[1].split(","))

或者你想要所有的元素拆分和连接然后uniq

  var new_fruits = [];
  $.each(fruits, function(i, el){
    fruits.concat(fruits[i].split(","))
    if($.inArray(el, new_fruits) === -1) new_fruits.push(el);

  });

或使用underscore.js

 _.uniq(fruits, false)

答案 4 :(得分:0)

这应该有效:

var fruits = ["orange","orange,apple","apple,orange,pear"];
var out = [];

$(fruits).each(function(i) {
 var s = fruits[i].split(',');  
   $(s).each(function(i) {
    if($.inArray(s[i], out)===-1) 
       {
           out.push(s[i]);
       }
   });
});

JSFIddle:http://jsfiddle.net/rRC65/

答案 5 :(得分:0)

这使用一个对象来捕获元素,然后返回它的键。而且不需要垫片。

function remdupes(arr) {
  var obj = {}, out = [];
  for (var i = 0, l = arr.length; i < l; i++) {
    var el = arr[i].split(',');
    for (var ii = 0, ll = el.length; ii < ll; ii++) {
      obj[el[i]] = true;
    }
  }
  for (var key in obj) { out.push(key); }
  return out;
}

请注意最后几行:

for (var key in obj) { out.push(key); };
return out

可以改写:

return Object.keys(obj);

答案 6 :(得分:0)

你可以这样做(eliminateDuplicates):

fruits = fruits.join(','); // "orange,orange,apple,apple,orange,pear"
fruits = fruits.split(','); // ["orange", "orange", "apple", "apple", "orange", "pear"]
fruits = eliminateDuplicates(fruits); // ["orange", "apple", "pear"]