在 Javascript 中,如何在特定索引中创建辅助数组?

In Javascript how do I create a secondary array in a specific index?

提问人:noClueAboutWhatIMDoing 提问时间:12/21/2021 最后编辑:isherwoodnoClueAboutWhatIMDoing 更新时间:12/21/2021 访问量:121

问:

如何在 Javascript 中从现有数组创建子数组?

例如;

Arr = [5,2,1,2]

然后我想在 Arr 的位置 1 插入 8,但保留原始值 2。所以 arr 可以成为:

Arr = [5,[2,8],1,2]

我尝试使用 concat,它做了一些事情,但复制了所有值。

请记住,这可能会增长,例如Arr = [5,[2,8,3,4],1,[2,3]]

谢谢!

JavaScript 数组 数据操作

评论

0赞 pilchard 12/21/2021
你的意思是你只想要唯一的值吗?

答:

0赞 mars 12/21/2021 #1

有几种不同的方法可以做到这一点,但您可以将当前数组索引重新分配给数组,如下所示:

Arr[1] = [Arr[1], 8].然后,如果您想继续添加到 Arr 中索引 1 处的数组中,您可以执行类似 .Arr[1].push(x)

1赞 Nina Scholz 12/21/2021 #2

您可以分配连接的值。

const
    addAt = (array, value, index) => array[index] = [].concat(array[index], value),
    array = [5, 2, 1, 2];

addAt(array, 8, 1);
console.log(array)

addAt(array, 3, 1);
console.log(array)
.as-console-wrapper { max-height: 100% !important; top: 0; }

0赞 Alexander Santos 12/21/2021 #3

你可以做这样的事情(可能不是最好的答案,但可能会有所帮助)

const addIntoArray = (arr, toAdd, index) => {
  arr[index] = typeof arr[index] == "number" ? [arr[index], toAdd] : [...arr[index], toAdd];
  return arr
}

Arr = [5,2,1,2]

console.log(Arr); // [ 5, 2, 1, 2 ]
addIntoArray(Arr, 1, 1)
console.log(Arr); // [ 5, [ 2, 1 ], 1, 2 ]
addIntoArray(Arr, 3, 1)
console.log(Arr) // [ 5, [ 2, 1, 3 ], 1, 2 ]

基本上扩展数组,然后在它的末尾添加并创建一个数组,第一个元素作为数字,第二个元素作为新元素。(它修改了原始数组,如示例所示,因此请注意,因为它可能会导致错误)...arrtoAdd[arr[index], toAdd]

这只是一个简单/通用的类型检查,看看是否还没有数组typeof arr[index] == "number"

0赞 marmeladze 12/21/2021 #4

此功能应满足您的基本条件

// a - array, v - value to insert, i - position to insert 
const avi = (a, v, i) => { 
  r = a.slice(0, i); 
  r.push([a[i], v]);
  a.slice(i+1, a.length).forEach(e => r.push(e)); 
  return r;
}

console.log(JSON.stringify(avi([5,2,1,2], 8, 1)))
//=> "[5,[2,8],1,2]"