Javascript 在JS中过滤数组中具有唯一属性的对象的推荐方法是什么?

Javascript 在JS中过滤数组中具有唯一属性的对象的推荐方法是什么?,javascript,arrays,Javascript,Arrays,如何基于唯一属性筛选数组中的对象 这里我有一个数组,其中KEY是对象中的键值。 如何过滤键值唯一的对象。键值在对象中重复,但应仅过滤掉第一个键值 var array = []; array = [ { "KEY": "00001", "ID": "1234", "ID_DESC": "1234", "NOT_UNIQUE_VALUE": "119.0", "NOT_UNIQUE_TYPE": "this is not unique" }, {

如何基于唯一属性筛选数组中的对象 这里我有一个数组,其中KEY是对象中的键值。 如何过滤键值唯一的对象。键值在对象中重复,但应仅过滤掉第一个键值

var array = [];
array = [
  {
    "KEY": "00001",
    "ID": "1234",
    "ID_DESC": "1234",
    "NOT_UNIQUE_VALUE": "119.0",
    "NOT_UNIQUE_TYPE": "this is not unique"
  }, 
  {
    "KEY":"00001",
    "ID":"1234",
    "ID_DESC":"1234",
    "NOT_UNIQUE_VALUE":"11019.0",
    "NOT_UNIQUE_TYPE":"not unique type"
  },
  {
    "KEY":"00002",
    "ID":"2468",
    "ID_DESC":"2468",
    "NOT_UNIQUE_VALUE":"195.0",
    "NOT_UNIQUE_TYPE":"not unique type",
  },
  {
    "KEY":"00002",
    "ID":"2468",
    "ID_DESC":"2468",
    "NOT_UNIQUE_VALUE":"195.0",
    "NOT_UNIQUE_TYPE":"not unique type",
  }]
结果:

uniquearray = [
  {
    "KEY":"00001",
    "ID":"1234",
    "ID_DESC":"1234",
    "NOT_UNIQUE_VALUE":"119.0",
    "NO T_UNIQUE_TYPE":"this is not unique"
  },
  {
    "KEY":"00002",
    "ID":"2468",
    "ID_DESC":"2468",
    "NOT_UNIQUE_VALUE":"195.0",
    "NOT_UNIQUE_TYPE":"not unique type"
  }]
var uniqueArray=[]
对于(var i=0;i
您可以迭代成员并查看KEY属性。如果以前没有看到过,请将其添加到已看到的键列表中并返回true。如果以前见过,则返回false。例如

var数组=[{
“密钥”:“00001”,
“ID”:“1234”,
“ID_DESC”:“1234”,
“非唯一值”:“119.0”,
“非唯一类型”:“这不是唯一的”
}, {
“密钥”:“00001”,
“ID”:“1234”,
“ID_DESC”:“1234”,
“非唯一值”:“11019.0”,
“非唯一类型”:“非唯一类型”
}, {
“密钥”:“00002”,
“ID”:“2468”,
“ID_DESC”:“2468”,
“非唯一值”:“195.0”,
“非唯一类型”:“非唯一类型”,
}, {
“密钥”:“00002”,
“ID”:“2468”,
“ID_DESC”:“2468”,
“非唯一值”:“195.0”,
“非唯一类型”:“非唯一类型”,
}]
var seenKeys=Object.create(null);
var result=array.filter(函数(obj){
返回seenKeys[obj.KEY]?false:seenKeys[obj.KEY]=true;
});

console.log(result)
我会使用
reduce()
,将唯一的元素收集到
映射中(如果需要的话,它甚至会保留插入顺序),并在最后将其打包回数组:

var数组=[{
“密钥”:“00001”,
“ID”:“1234”,
“ID_DESC”:“1234”,
“非唯一值”:“119.0”,
“非唯一类型”:“这不是唯一的”
}, {
“密钥”:“00001”,
“ID”:“1234”,
“ID_DESC”:“1234”,
“非唯一值”:“11019.0”,
“非唯一类型”:“非唯一类型”
}, {
“密钥”:“00002”,
“ID”:“2468”,
“ID_DESC”:“2468”,
“非唯一值”:“195.0”,
“非唯一类型”:“非唯一类型”,
}, {
“密钥”:“00002”,
“ID”:“2468”,
“ID_DESC”:“2468”,
“非唯一值”:“195.0”,
“非唯一类型”:“非唯一类型”,
}]
var result=Array.from(Array.reduce)(m,o)=>{
如果(!m.has(o.KEY))
m、 设置(o键,o);
返回m;
},新映射())。值());

console.log(result)
下面是一个ES6版本的筛选实用程序:

// Unique is only that item, if we find him in array on the same index.
const onlyUniqueProperty = prop => (value, index, self) =>
    self.findIndex(item => item[prop] === value[prop]) === index;

// Usage:
const uniqueItems = items.filter(onlyUniqueProperty('key'));
如果我们想同时支持JS和Immutable.JS对象,小更新:

const getProp = (obj, prop) => typeof obj.get === 'function' ? obj.get(prop) : obj[prop];

// Unique is only that item, if we find him in array on the same index.
const onlyUniqueProperty = prop => (value, index, self) =>
    self.findIndex(item => getProp(item, prop) === getProp(value, prop)) === index;

// Usage:
const uniqueItems = items.filter(onlyUniqueProperty('key'));

你试过什么?哪里出了问题?从我的头顶上看,我会说这个片段产生了最后一个副本,结果是
11019.0
-东西,而不是
119.0
(对于
“KEY”:“00001”
const getProp = (obj, prop) => typeof obj.get === 'function' ? obj.get(prop) : obj[prop];

// Unique is only that item, if we find him in array on the same index.
const onlyUniqueProperty = prop => (value, index, self) =>
    self.findIndex(item => getProp(item, prop) === getProp(value, prop)) === index;

// Usage:
const uniqueItems = items.filter(onlyUniqueProperty('key'));