2017-07-03 57 views
0

我有一个这样的对象数组的字符串,检查为对象的数组的属性和返回基于价值

let employee = [ 
      { 
       NodeType: "intern", 
       NodeName: "Node1" 
      }, { 
       NodeType: "intern", 
       NodeName: "Node2" 
      }, { 
       NodeType: "full-time", 
       NodeName: "Node1" 
      }, { 
       NodeType: "contract", 
       NodeName: "Node1" 
      } 
] 

我需要能够通过数组来看看,看看是否所有员工随后全职返回“全职”,或者如果员工列表仅仅是“实习生”返回实习生或者其混合,返回“混合”

我试图

  var interntype = employee.find((obj) => { 
       return obj.type == "intern" 
      }); 
     var fulltimetype = employee.find((obj) => { 
       return obj.type == "full-time" 
      }); 
     var contracttype = employee.find((obj) => { 
       return obj.type == "contract" 
      }); 

    if(internType) { 
     return "intern"; 
    } else if (fulltimeType) { 
      return "fullTime" 
    } else return "mixed"; 

,但有没有办法在哪里不要这样做而不是一次

+1

查找到['reduce'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)函数的一个数组。 –

回答

3

将所有的NodeType值插入一个集合,并检查大小。如果是大于1,返回混合,如果不是返回单个项目:

const employees = [{"NodeType":"intern","NodeName":"Node1"},{"NodeType":"intern","NodeName":"Node2"},{"NodeType":"full-time","NodeName":"Node1"},{"NodeType":"contract","NodeName":"Node1"}]; 
 

 
const getEmployeesType = (employees) => { 
 
    const types = new Set(employees.map(({ NodeType }) => NodeType)); 
 
    return types.size > 1 ? 'mixed' : [...types][0]; 
 
}; 
 

 
console.log('mixed: ', getEmployeesType(employees)); 
 

 
console.log('internes: ', getEmployeesType(employees.slice(0, 2)));