0

假设我有一个如下所示的 Javascript 数组。

const data = [   
    { group: 'A', name: 'SD', testid:1},    
    { group: 'B', name: 'FI',testid:2  },    
    { group: 'A', name: 'MM', testid:1 },   
    { group: 'B', name: 'CO', testid:2 },   
    { group: 'A', name:  'QW',  testid:1 } 
];

我想获得两个特定的属性(grouptestid)。

我想在最终结果中检索这些属性的唯一值。所以我的最终结果将是

{group:A,testid:1},{group:B,testid:2}

到目前为止我尝试过的内容如下。

  data.map(item=>item.group).

但这只会给我一个属性并且没有任何不同的值如何使用 Javascript 中的最新 ecmascript 语法来实现这一点

4

3 回答 3

0

您可以遍历它并获得所需的结果。

result = []
data.forEach(x=>{
    if(!result.some(y=>y.group===x.group && x.testid===y.testid)){
        result.push({group:x.group,testid:x.testid});
    }
});
于 2020-07-22T17:41:25.903 回答
0

您可以reduce数组并每次检查该对是否存在:

data.reduce((prev, el) =>{
    if(prev.some(o => o.group == el.group && o.testid == el.testid))
         return prev;
    return [...prev, {group:el.group, testid:el.testid}]
}, [])

const data = [   
    { group: 'A', name: 'SD', testid:1},    
    { group: 'B', name: 'FI',testid:2  },    
    { group: 'A', name: 'MM', testid:1 },   
    { group: 'B', name: 'CO', testid:2 },   
    { group: 'A', name:  'QW',  testid:1 } 
];
let result = data.reduce((prev, el) =>{
    if(prev.some(o => o.group == el.group && o.testid == el.testid))
         return prev;
    return [...prev, {group:el.group, testid:el.testid}]
}, []);

console.log(result);

于 2020-07-22T17:44:08.690 回答
0

使用forEach循环并使用键作为 uniq_id 构建对象。遍历之后,返回Object.values上面的对象。

const convert = (arr) => {
  const res = {};
  arr.forEach(({group, testid}) => {
    // change uniq_id based on requirement
    const uniq_id = `${group}-${testid}`;
    res[uniq_id] = { group, testid};
  });
  return Object.values(res);
}

const data = [   
    { group: 'A', name: 'SD', testid:1},    
    { group: 'B', name: 'FI',testid:2  },    
    { group: 'A', name: 'MM', testid:1 },   
    { group: 'B', name: 'CO', testid:2 },   
    { group: 'A', name:  'QW',  testid:1 } 
];

console.log(convert(data));

于 2020-07-22T17:47:10.500 回答