给定值,搜索对象中的相邻键:值

时间:2017-09-22 19:46:22

标签: javascript

给出这样的数据结构:

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;
        }
    };
}

4 个答案:

答案 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>