2017-09-22 23 views
1

值:给定值,搜索相邻的键:在给定的数据结构像这样的对象

var userList= [  
    { 
     employeeId: 10, 
     name: "Bill", 
    }, 
    { 
     employeeId: 12, 
     name: "Tom", 
    }, 
    { 
     employeeId: 14, 
     name: "Sue", 
    }, 
] 

10输入我怎么能找到价值Bill

所以,换句话说,给定的值对另一个重点:价值对象的数组,我会如何搜索该对象中的其他键/值?

我猜测步骤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

你只得到了一个对象,所以有什么问题呢?你究竟在问什么? –

+0

应该注意到这个对象是数组中的几十个之一。 –

回答

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

我相信他们正在寻找'比尔' –

+0

它应该是person.name – Niladri

+0

编辑答案 – marvel308

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

+0

谢谢,我已经更新了我的代码和问题的清晰性,因为我最终不在数组内搜索,而是数组的类似物体。 –

+1

感谢您的更新,但我不明白你的新问题。您描述的数据不是有效的JavaScript或json语法。 –

+0

你是对的......这就是为什么我不应该匆忙。用我目前最好的解决方案和更好的格式更新。谢谢! –

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") 
} 
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>

相关问题