来自javascript中的一组值的单值汇总

时间:2017-08-19 17:50:26

标签: javascript ecmascript-6 set

我有一个名为fruits对象的Fruit数组,它有一个status属性,每个fruit的状态需要汇总到fruit状态

以下是一个示例:

const fruits = [
    {id: 'apple', status: 'good'},
    {id: 'orange', status: 'inprogress'},
    {id: 'kiwi', status: 'error'}
]

如果所有水果状态相同,则基于status属性,fruits.status =公共属性。

  • 如果其中任何一个状态为错误,则水果状态为错误

  • 如果只有好的和正在进行中,fruits.status正在进行中

我们怎样才能在es6中这样做?

我试过

function getFruitsStatus(fruitarray) {
    const types = new Set(fruitarray.map(({status}) => status));
    types.forEach(function(value) {
      console.log(value);
   });    
}

2 个答案:

答案 0 :(得分:1)

您可以使用set.has()查看某个元素是否包含在您的集合中:



const fruits = [
    {id: 'apple', status: 'good'},
    {id: 'orange', status: 'inprogress'},
    {id: 'kiwi', status: 'error'}
]

const goods = [{status: 'good'}]

const progress = [{status: 'good'}, {status: 'inprogress'}]

function getFruitsStatus(fruitarray) {
    const types = new Set( fruitarray.map(({status}) => status) )
    if (types.has('error')) throw new Error('Bad fruit')
    if (types.has('inprogress')) return 'inprogress'
    return 'good'
   
}

console.log(getFruitsStatus(goods))
console.log(getFruitsStatus(progress))
console.log(getFruitsStatus(fruits))




答案 1 :(得分:0)

我可能会这样做

function getFruitsStatus(fruitarray) {
  return fruitarray.reduce((status, item) => {
    if (status === 'error' || item.status ==='error') return 'error';
    if (status === 'inprogress') return 'inprogress';

    return item.status;
  }, 'good');