我不明白下面代码块第六行上这个=符号的用途。我理解参数如何抓取数组的每个索引号,我只是不明白为什么chineseFood [array [0]] = array [array.length-1];换句话说,我没有得到等号的目的,好像它几乎相互比较,存储在变量chineseFood中存储的空对象中。有人可以澄清一下吗?非常感谢。
function transformFirstAndLast(array) {
var chineseFood = {};
//takes 1st element (at index 0) and sets it to the last element (nth index): array(length-1)
chineseFood[array[0]] = array[array.length - 1];
return chineseFood;
}
console.log( transformFirstAndLast(['Orange', 'Lemon', 'Pork', 'Chicken']) );
以下的输出
{Orange: "Chicken"}
答案 0 :(得分:3)
等号不是比较,而是分配。 chineseFood
是一个对象,这意味着它可以像字典一样对待,并且可以使用[]
运算符而不是.
运算符来访问其属性:
myObj = {
foo: "bar"
};
console.log(myObj["foo"]); // bar
console.log(myObj.foo); // bar
同样,您也可以这样分配属性:
myObj = {};
myObj["foo"] = 3;
console.log(myObj["foo"]); // 3
console.log(myObj.foo); // 3
这是您的代码正在做的事情。它正在检索array[array.length-1]
的值,即"Chicken"
。然后,它将此值分配给chineseFood
的属性,该属性的名称由array[0]
表示,恰好是"Orange"
。因此,Orange
上名为chineseFood
的属性设置为array[array.length - 1]
,这就是chineseFood
评估为{Orange: "Chicken"}
的原因。
如果您不知道要提前更改的属性的名称(如此代码的情况),或者您希望创建具有其他名称的属性,则此方法访问属性特别有用。是非法的:
myObj = {
".you can't usually use with spaces or start w/ periods": false
};
myObj[".you can't usually use with spaces or start w/ periods"] = true;
console.log(myObj[".you can't usually use with spaces or start w/ periods"]);
// there is no way to read this property the normal way
答案 1 :(得分:0)
基本上是做什么的: 你的对象是:
var obj = {Orange: "Chicken"};
你的阵列是:
var arr = ['Orange','Lemon','Pork','Chicken']
这行说的是选择数组的第一个元素并检查对象中的prop,并将其值更改为数组的最后一个元素,这里:
arr[0] = "orange";
所以这一行:
obj[arr[0]]
可以被视为obj['orange']
。
之后你改变它的值:
Obj[arr[0]] = arr[arr.length-1] which can be written as obj['orange'] = 'chicken'