给出这样的数据结构:
var userList= [
{
employeeId: 10,
name: "Bill",
},
{
employeeId: 12,
name: "Tom",
},
{
employeeId: 14,
name: "Sue",
},
]
输入10
如何找到值Bill
?
因此,换句话说,给定一个与另一个Key:对象数组中的值配对的值,我如何搜索该对象中的其他键/值?
我猜测第1步涉及搜索数组中每个对象内的值,第2步涉及返回数组中对象的索引,这意味着步骤3将以某种方式映射到该索引。
编辑:所以,我最终只使用了一个带for...in
循环的函数来解决这个问题,如下所示。虽然我可能在表达问题方面做得特别差,但我试图输入员工编号并将其与员工的姓名相匹配。 for...in
循环似乎是我能找到的最简单的循环,但我正在寻找一种更优雅的对象方法或一些这样的方法来找到它。干杯!
function personLookup(x){
for (i = 0; i<userList.length; i++){
if (userList[i].employeeID== x){
return userList[i].name;
}
};
}
答案 0 :(得分:6)
数组具有.find
函数,可用于查找与特定条件匹配的元素。因此,要查找具有employeeNumber 10的人员,您可以执行以下操作:
let employees = [{
name: 'Jill',
employeeNumber: 9
}, {
name: 'Bill',
employeeNumber: 10
}];
let numberTen = employees.find(function (person) {
return person.employeeNumber == 10;
});
if (numberTen !== undefined) {
console.log(numberTen.name)
}
请注意.find
是合适的,如果您只需要一个结果,但如果有多个匹配您正在寻找的标准,.filter
是更好的选择。
请参阅以下文件:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
答案 1 :(得分:3)
你可以做到
let person= {
"name" : "Bill",
"employeeNumber" : 10
}
for(let element of Object.keys(person)){
if(person[element] == 10){
console.log(element);
console.log(person.name);
}
}
答案 2 :(得分:1)
如果您的数据中有多个数字10,则可以使用.filter
let employees = [{
name: 'Jill',
employeeNumber: 9
}, {
name: 'Bill',
employeeNumber: 10
}, {
name: 'Billy',
employeeNumber: 10
}
}];
const employData = employees.filter(employee => employee.employeeNumber == 10)
if(employData.length > 0){
console.log("names are ", employData.map(employee => employee.name))
} else {
console.log("no employ found")
}
答案 3 :(得分:0)
因此从长远来看,for...in
循环似乎是最简单的。
https://codepen.io/mizzoudavis/pen/pWNvxw
var userList= [
{
'employeeID': 10,
'name': "Bill",
},
{
'employeeID': 12,
'name': "Tom",
},
{
'employeeID': 14,
'name': "Sue",
},
]
var x;
$('#submit').click(function(){
x = $('#empID').val();
personLookup(x);
})
function personLookup(x){
for (i = 0; i<userList.length; i++){
if (userList[i].employeeID== x){
$('div').text(userList[i].name);
}
};
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="empID"/>
<button id="submit">submit</button>
<div></div>