如何从数组中返回不同的对象?

时间:2015-12-15 09:56:06

标签: javascript javascript-objects

我使用这种方法(不好)

function unique(objArray){

uArray是临时数组变量,用于将对象保存为字符串

 var uArray=[];  

此函数返回arr

  var arr=[]; 

每个对象转换为字符串

 for(var i=0;i<objArray.length;i++){
 if(typeof objArray[i] === "object")
 uArray[i]=JSON.stringify(objArray[i]);
 }

将字符串推送到newArray arr

 for( i=0;i<uArray.length;i++){
 if( arr.indexOf(uArray[i]) === -1)
 {
  arr.push(uArray[i]);
 }

 }

将字符串解析为对象

 for(i=0;i<arr.length;i++)
 {
  arr[i]=JSON.parse(arr[i]);
 }
 return arr;
 }

**样本输入数组**

var users = [
 { 'user': 'barney',  'age': 36, 'active': true },
 { 'user': 'fred',    'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 1,  'active': true },
 { 'user': 'fred',    'age': 40, 'active': false },
 { 'user': 'salman',    'age': 50, 'active': false },
 { 'user': 'usman',    'age': 44, 'active': false },
 { 'user': 'abrar',    'age': 22, 'active': false },
 {'K1':21, 'k2':22},
 { firstName:'XYZ',lastName'ABC'},`
 { firstName:'XYZ',lastName:'ABC'},
 { firstName:'XYZ1',lastName:'ABC1'}
 ];

      unique(users);

3 个答案:

答案 0 :(得分:1)

以这种方式尝试:

function unique(objArray){

  return objArray.filter(function(inst, i){
      for(var j=i+1; j<objArray.length; j++){
          if(JSON.stringify(objArray[j])==JSON.stringify(inst)) return false;
      }
      return true;
  });

}

FIddle

答案 1 :(得分:1)

map将对象转换为您正在执行的字符串,filter复制出来,然后重新map对象。

function unique(arr) {
  return arr.map(function(el) {
    return JSON.stringify(el);
  }).filter(function(e, i, a) {
    return a.indexOf(e) === i;
  }).map(function(el) {
    return JSON.parse(el);
  });
}

unique(users);

DEMO

答案 2 :(得分:-3)

我看到你要从数组中删除重复项。您可以使用下划线unique功能来执行此操作。

我建议您使用下划线实用程序轻松完成此操作(以下链接)。

使用下划线:

_.uniq(inputArray) // Return unique keys
  

生成数组的无副本版本。如果数组有   已经排序

http://underscorejs.org/docs/underscore.html#section-60

此功能的源代码:

  _.uniq = function(array, isSorted, iteratee, context) {
    if (!_.isBoolean(isSorted)) {
      context = iteratee;
      iteratee = isSorted;
      isSorted = false;
    }
    if (iteratee != null) iteratee = cb(iteratee, context);
    var result = [];
    var seen = [];
    for (var i = 0, length = getLength(array); i < length; i++) {
      var value = array[i],
          computed = iteratee ? iteratee(value, i, array) : value;
      if (isSorted) {
        if (!i || seen !== computed) result.push(value);
        seen = computed;
      } else if (iteratee) {
        if (!_.contains(seen, computed)) {
          seen.push(computed);
          result.push(value);
        }
      } else if (!_.contains(result, value)) {
        result.push(value);
      }
    }
    return result;
  };

实施例

<script src="//underscorejs.org/underscore-min.js"></script>
<script>
  b={t:'B is Object'}
var a=[1,2,3,3,'4',b,'4',b]

document.write('Before Unique:<br>')
document.write(a)
document.write('<br>')
document.write('After Unique:<br>')
document.write  (_.unique(a))
  </script>