假设我有以下内容:

var array = 
    [
        {"name":"Joe", "age":17}, 
        {"name":"Bob", "age":17}, 
        {"name":"Carl", "age": 35}
    ]

获得所有不同年龄的数组的最佳方法是什么,这样我就得到了一个结果数组:

[17, 35]

是否有一些方法,我可以选择结构数据或更好的方法,这样我就不必遍历每个数组检查“年龄”的值,并检查另一个数组是否存在,如果没有添加它?

如果有某种方法可以让我不用迭代就能得到不同的年龄……

目前效率低下的方式,我想改进…如果它的意思不是“数组”是一个对象的数组,而是一个对象的“映射”与一些唯一的键(即。"1,2,3")也可以。我只是在寻找最高效的方式。

以下是我目前的做法,但对我来说,迭代似乎只是为了提高效率,即使它确实有效……

var distinct = []
for (var i = 0; i < array.length; i++)
   if (array[i].age not in distinct)
      distinct.push(array[i].age)

当前回答

Var数组= [ {" name ":“乔”,“年龄”:17}, {" name ":“鲍勃”、“年龄”:17}, {"name":"Carl", "age": 35} ] console.log(种(array.reduce ((r,{时代})= > (r[时代]= ",r), {})))

输出:

Array ["17", "35"]

其他回答

现在我们可以在相同的键和相同的值的基础上唯一对象

 const arr = [{"name":"Joe", "age":17},{"name":"Bob", "age":17}, {"name":"Carl", "age": 35},{"name":"Joe", "age":17}]
    let unique = []
     for (let char of arr) {
     let check = unique.find(e=> JSON.stringify(e) == JSON.stringify(char))
     if(!check) {
     unique.push(char)
     }
     }
    console.log(unique)

/ / / /输出:::[{名称:“乔”,年龄:17},{名称:“Bob”,年龄:17},{名称:“卡尔”,年龄:35}]

我只需要映射和删除dups:

var ages = array.map(function(obj) { return obj.age; });
ages = ages.filter(function(v,i) { return ages.indexOf(v) == i; });

console.log(ages); //=> [17, 35]

编辑:Aight !就性能而言,这不是最有效的方法,但在我看来,这是最简单、最易读的方法。如果你真的关心微观优化,或者你有大量的数据,那么一个常规的for循环将会更“有效”。

从一组键中获取不同值的集合的方法。

您可以从这里获取给定的代码,并仅为所需的键添加映射,以获得唯一对象值的数组。

const listOfTags = [{ id: 1, label: "Hello", color: "red", sorting: 0 }, { id: 2, label: "World", color: "green", sorting: 1 }, { id: 3, label: "Hello", color: "blue", sorting: 4 }, { id: 4, label: "Sunshine", color: "yellow", sorting: 5 }, { id: 5, label: "Hello", color: "red", sorting: 6 }], keys = ['label', 'color'], filtered = listOfTags.filter( (s => o => (k => !s.has(k) && s.add(k)) (keys.map(k => o[k]).join('|')) )(new Set) ) result = filtered.map(o => Object.fromEntries(keys.map(k => [k, o[k]]))); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }

下面的代码将显示唯一的年龄数组以及没有重复年龄的新数组

var data = [
  {"name": "Joe", "age": 17}, 
  {"name": "Bob", "age": 17}, 
  {"name": "Carl", "age": 35}
];

var unique = [];
var tempArr = [];
data.forEach((value, index) => {
    if (unique.indexOf(value.age) === -1) {
        unique.push(value.age);
    } else {
        tempArr.push(index);    
    }
});
tempArr.reverse();
tempArr.forEach(ele => {
    data.splice(ele, 1);
});
console.log('Unique Ages', unique);
console.log('Unique Array', data);```

Const数组= [{ “名称”:“乔”, “年龄”:17 }, { “名称”:“鲍勃”, “年龄”:17 }, { “名称”:“卡尔”, “年龄”:35 } ] const uniqueArrayByProperty = (array, callback) => { 返回数组中。Reduce ((prev, item) => { Const v =回调(项目); If (! prew .includes(v)) 返回上一页 },[]) } console.log(uniqueArrayByProperty(array, it => .age));