我有一个后端API,当它不为空时,它将以这种格式提供数据。我必须始终将来自用户的任何新数据推入第一个数组的0th
索引中。
[
[
{
name: 'Name 1',
type: 'Type 1'
},
{
name: 'Name 2',
type: 'Type 2'
}
],
[
{
name: 'Name 4',
type: 'Type 4'
},
{
name: 'Name 5',
type: 'Type 5'
}
]
]
以下代码适用于非空数据。但是,如果API数据为空,则会给出无法读取未定义错误的属性“ push” 。
arr: any = [];
constructor() {}
submit(data){
const dataObj = {
name: 'Test name',
type: 'Test type',
}
this.arr[0].push(dataObj)
console.log('Result array - ', this.arr)
}
我使用Stackblitz创建了working example。谁能帮忙吗?
答案 0 :(得分:1)
您可以测试它是否为空,如果是空的,则首先推送一个空数组:
submit(data){
const dataObj = {
name: 'Test name',
type: 'Test type',
}
if (!this.arr[0]) {
this.arr.push([]);
}
this.arr[0].push(dataObj);
console.log('Result array - ', this.arr);
}
您还说您想将其推送到0th index of first array
。因此,这解决了“第一个数组”部分。如果您真的想将其推入第一个数组的0th
索引,请使用unshift
:
this.arr[0].unshift(dataObj);
答案 1 :(得分:0)
您可以使用unshift。
const arr = [1, 2, 3];
arr.unshift(0); // [0, 1, 2, 3];
请注意,这是一个变异函数。
您还可以使用:
const arr = [1, 2, 3];
[0].concat(arr); // [0, 1, 2, 3];
这不会改变现有数组。
答案 2 :(得分:0)
令人惊讶的是,有多种方法可以在第0个位置输入元素。就像提到的其他答案一样,您可以使用push()
和shift()
来实现。您也可以使用splice()
方法。
const arr1 = [1, 2, 3];
arr1.splice(0, 0, 4); // <-- enter in pos. 0
console.log('Position 0: ', arr1);
const arr2 = [1, 2, 3];
arr2.splice(1, 0, 4); // <-- enter in pos. 1
console.log('Position 1:', arr2);