基本引用数组中的对象
basic referring to an object in an array
我在参加一个codeacademy的javascript练习时遇到了这个问题。以下代码由codeacademy提供。
var friends = {
bill: {
firstName: "Bill",
lastName: "Gates",
number: "1",
address: ['abc', 'def', 'ghi']
},
steve: {
firstName: "Steve",
lastNAme: "Jobs",
number: "2",
address: ['abc', 'def', 'ghi']
}
};
var list = function(obj) {
for (var prop in obj) {
console.log(prop);
}
};
var search = function(name) {
for (var prop in friends) {
if (friends[prop].firstName === name) {
console.log(friends[prop]);
return friends[prop];
}
}
};
我不明白的是,在搜索功能中,为什么我要写"朋友[道具]"而不是"道具"。如果for/in循环遍历朋友(数组?)中的每个属性,为什么我需要再次指定每个道具属于哪个数组?为什么我不能使用下面的代码?
var search = function(name) {
for (var prop in friends) {
if (prop.firstName === name) {
console.log(prop);
return prop;
}
}
};
prop
实际上是对象属性(=key)的名称,而不是属性本身。它是一个普通字符串("bill"
),而不是实际对象friends.bill
(/对它的引用)。
这也是为什么你要写
的原因friends[prop] // prop gets evaluated here, it's value is the identifier
代替
friends.prop // prop is treated as the identifier here
的例子:
var friends = {
bill: { ...
}
}
for (var prop in friends) {
// prop == "bill";
friends[prop] == friends.bill
}
实际上,这类似于(新的)Object.keys(friends)
,它返回您可以迭代的对象的所有属性名称的数组(这可能是一个更直观的人来自其他语言)。
编辑:一个重要的提示!
与Object.keys()
不同的是,for in
列出了对象的所有属性,甚至包括从它的原型继承的属性。因此,如果你想确保你只获得你的"原生"属性,你总是需要检查它是否是对象的真正属性:
for (var prop in friends) {
if (friends.hasOwnProperty(prop) ){
// it's a true property of your object
}
}
for..in
迭代对象的键,而不是值
如果你熟悉PHP的话:
foreach ($friends as $prop => $value) ...
for..in
只给你$prop
,而不是$value
。要获得$value
,您需要使用$friends[$prop]
,或者在Javascript术语中使用friends[prop]
。
将变量prop
视为键->值配对中的键。
语句friends[prop]
指定对象friends
的键名为prop
的值。
如果你说prop.firstname
,你实际上是指定属性firstname
的字符串分配给prop
,这没有意义,因为prop
不是一个对象。
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序