推送维度数组

时间:2019-05-22 09:10:25

标签: javascript

为什么在第二个示例中答案未定义?

// First
var arr = [
  [1, 4, 6],
  ['alex']
];
var newArr = arr[1];
newArr.push('Peter');
console.log(arr);

// Second
var arr = [
  [1, 4, 6],
  ['alex']
];
arr.push([1]['Peter']);
console.log(arr);

4 个答案:

答案 0 :(得分:2)

代码[1]['Peter']试图从数组文字Peter访问名为[1]的键。它是undefined

您的代码与此等效:

var arr = [
  [1, 4, 6],
  ['alex']
];

var tempArray = [1];
var tempValue = tempArray['Peter'] // undefined

arr.push(tempValue);
console.log(arr);

您应将其更改为:arr[1].push('Peter')

答案 1 :(得分:1)

该语法[1]['Peter']并没有您想象的那样。您正在传递输入参数。它没有引用将其推入的数组,它是完全独立的。因此,您实际上是在告诉JavaScript首先创建一个新数组([1]),然后尝试从其中访问一个名为“ Peter”的索引(["Peter"]),然后将其推入下一个arr中的免费索引。显然,新数组中不存在“ Peter”索引,这就是为什么它输出undefined的原因。

相反,您必须像这样编写它,以便将其推送到现有数组,该数组本身位于1的索引arr上:

// First
var arr = [
  [1, 4, 6],
  ['alex']
];
var newArr = arr[1];
newArr.push('Peter');
console.log(arr);

// Second
var arr = [
  [1, 4, 6],
  ['alex']
];
arr[1].push('Peter');
console.log(arr);

答案 2 :(得分:0)

问题是

arr.push([1]['Peter']);

但是包含单个元素1的数组不具有属性Peter。数组通常不具有非数字属性(除了Array.prototypeObject.prototype上的属性以外)

答案 3 :(得分:0)

您需要做的就是

var arr = [
  [1, 4, 6],
  ['alex']
];
arr[1].push('Peter');
console.log(arr);