通过对象数组迭代的不同方法javascript?
如果这对你来说是一个愚蠢的问题,请忽略。我刚刚提出了自己的问题解决方案,但我知道它不是一个好的解决方案,并且有更好的方法可以做到这一点,请回答是否有其他解决方案只使用JavaScript。通过对象数组迭代的不同方法javascript?
它要求创建一个函数来遍历一个对象数组,并且如果firstName匹配该配置文件,则返回该对象的prop。如果firstName或prop提供给未找到的函数,则返回一些语句。
var contacts = [
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intruiging Cases", "Violin"]
},
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
},
];
function lookUp(firstName, prop){
for (var i = 0; i < contacts.length; i++){
var n = parseInt(contacts.length);
if (contacts[i].firstName === firstName) {
if (contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
}
else return "No such property";
}
else if (i === (n-1)) {
return "No such contact";
}
}
}
console.log(lookUp("Sherlock", "likes"));
您可以通过使用forEach
function lookUp(firstName, prop)
{
var propValue = "No such contact";
contacts.forEach(function(element){
if (element.firstName == firstName)
{
propValue = element[ prop ] ? element[ prop ] : "No such property";
}
});
return propValue;
}
而且你loopUp
方法来改变这一点,就像@Amadan提及而不是返回的错误信息,抛出Error回来,您将需要赶上调用方法。
try
{
lookUp();//making call here
}
catch(e)
{
console.error(e);
}
contacts.length
是一个整数,而不是字符串,所以parseInt
是不必要的。实际上你并不需要
else if
:你可以把它放在循环之外,因为如果联系人存在,你已经退出了该功能。这也使得n
不必要,并且第一点没有意义。一般来说,返回错误信息是一个坏主意,除非它们明显区分为错误信息(请参阅semipredicate problem);否则,返回错误信息是一个不好的主意。那些应该作为例外抛出,或者至少作为非值返回null
/undefined
;或者当您询问lookUp('Adolf', 'favouriteSoup')
时,您可能会认为这种汤被称为"No such contact"
。但是,如果您提供的任务是返回错误消息,我不认为您可以对此做任何事情。
我同意。提出例外是更好的做法。如果属性值是“没有这样的联系”,那将是非常荒谬的,无法区分有效和无效输出。 –
我建议将两个想要的功能分为两个功能。
- 获取与给定的键/值对所有对象
lookUp(a, k, v)
- 从对象的数组仅获得一个关键
getKey(a, k)
function lookUp(a, k, v) {
return a.filter(function (b) {
return b[k] === v;
});
}
function getKey(a, k) {
return a.map(function (b) {
return k in b? b[k]: 'no property ' + k;
});
}
function print(o) {
document.write('<pre>' + JSON.stringify(o, 0, 4) + '</pre>');
}
var contacts = [{ "firstName": "Sherlock", "lastName": "Holmes", "number": "0487345643", "likes": ["Intruiging Cases", "Violin"] }, { "firstName": "Akira", "lastName": "Laine", "number": "0543236543", "likes": ["Pizza", "Coding", "Brownie Points"] }, { "firstName": "Harry", "lastName": "Potter", "number": "0994372684", "likes": ["Hogwarts", "Magic", "Hagrid"] }, { "firstName": "Kristian", "lastName": "Vos", "number": "unknown", "likes": ["Javascript", "Gaming", "Foxes"] }];
print(lookUp(contacts, 'firstName', 'Sherlock'));
print(getKey(lookUp(contacts, 'firstName', 'Sherlock'), 'likes'));
你被允许使用库? –
看Array.filter https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter –
没有库,只是普通的javascript – Leorczhu