chineseFood [array [0]] = array [array.length-1];

时间:2018-06-15 05:00:07

标签: javascript arrays

我不明白下面代码块第六行上这个=符号的用途。我理解参数如何抓取数组的每个索引号,我只是不明白为什么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"}

2 个答案:

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