无法在给定的数组索引处插入数字
Unable to insert a number at a given array index
有人可以向我解释为什么我的代码不起作用吗?
它应该将第二个 arg (3
) 放在 arr ([1,5]
) 之间。但是 JS 唯一告诉我的是“3”。
function where(arr, num){
for(var i=0;i<arr.length;i++){
if(arr[i] < num){
slice(arr[i+1,0,num])
}
else if(arr[i] > num){
slice(arr[i+1,0,num])
}
}
return arr;
}
where = ([1, 5],3);
请知道,我刚开始学JS,所以我的知识有限。
非常感谢任何建议或帮助。
这里有一些问题。
- 必须通过数组调用方法。即
arr.slice()
而 slice(...)
将引发错误。
slice
不会添加到数组中。它从数组中删除。您需要使用 splice
.
- 在这里像您一样使用
for
循环并不是最好的方法,因为它会在您插入元素后继续运行。本质上,您想将元素插入到有序列表中?如果是这样,请在插入元素后立即使用 return
或使用 break
. 退出该函数
您的函数可能如下所示:
function where (arr, num) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] > num) {
// Inserts num at i
arr.splice(i, 0, num);
return arr;
}
}
// If it's the highest num, add to the end of the array.
arr.push(num);
return arr;
}
var newArray = where([1, 5], 3);
但是,你的问题有点模棱两可,所以如果你想在特定索引处插入一个元素,你可以直接使用 splice:
var arr = [1, 5];
// Inserts 3 at index of 1
arr.splice(1, 0, 3);
// arr becomes [1, 3, 5]
我不确定你想在这里做什么,但是:
我认为 "slice" 函数没有达到您的预期;你应该在 Array 上调用它,参见 here,它 return 是一个 new 数组,所以你必须将结果分配给 something
但是,您只看到 (3
) 的原因是因为您从未调用您定义的 ẁhere
函数。相反,您正在计算 ([1,5],3)
的值,并将其影响到一个名为 where
.
的新全局变量
([1,5],3)
的值为“3”的原因是 comma operator。基本上:
([1,5],3)
与
相同
[1,5],3
计算 [1,5]
和 3
,return 最后计算的值 (3
)
尝试将最后一行更改为实际的函数调用:
var result = where([1, 5],3);
由于调用 slice 的方式,您会遇到错误;希望通过文档,您应该了解如何使其工作。
此外,正如其他地方所指出的,slice
可能不是您首先要调用的函数。
我想你想要像 dichotomic search 和 arr.splice
这样的东西在正确的位置:
function insertItemInOrderedArray(arr, item, from, to) {
if(from === undefined) from = 0;
if(to === undefined) to = arr.length;
if(from >= to) return arr.splice(from, 0, item), arr;
var m = (from + to) / 2 | 0;
if(arr[m] > item) return insertItemInOrderedArray(arr, item, from, m);
if(arr[m] < item) return insertItemInOrderedArray(arr, item, m+1, to);
return arr;
}
insertItemInOrderedArray([1,5], 3); // [1,3,5]
有人可以向我解释为什么我的代码不起作用吗?
它应该将第二个 arg (3
) 放在 arr ([1,5]
) 之间。但是 JS 唯一告诉我的是“3”。
function where(arr, num){
for(var i=0;i<arr.length;i++){
if(arr[i] < num){
slice(arr[i+1,0,num])
}
else if(arr[i] > num){
slice(arr[i+1,0,num])
}
}
return arr;
}
where = ([1, 5],3);
请知道,我刚开始学JS,所以我的知识有限。 非常感谢任何建议或帮助。
这里有一些问题。
- 必须通过数组调用方法。即
arr.slice()
而slice(...)
将引发错误。 slice
不会添加到数组中。它从数组中删除。您需要使用splice
.- 在这里像您一样使用
for
循环并不是最好的方法,因为它会在您插入元素后继续运行。本质上,您想将元素插入到有序列表中?如果是这样,请在插入元素后立即使用return
或使用break
. 退出该函数
您的函数可能如下所示:
function where (arr, num) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] > num) {
// Inserts num at i
arr.splice(i, 0, num);
return arr;
}
}
// If it's the highest num, add to the end of the array.
arr.push(num);
return arr;
}
var newArray = where([1, 5], 3);
但是,你的问题有点模棱两可,所以如果你想在特定索引处插入一个元素,你可以直接使用 splice:
var arr = [1, 5];
// Inserts 3 at index of 1
arr.splice(1, 0, 3);
// arr becomes [1, 3, 5]
我不确定你想在这里做什么,但是:
我认为 "slice" 函数没有达到您的预期;你应该在 Array 上调用它,参见 here,它 return 是一个 new 数组,所以你必须将结果分配给 something
但是,您只看到 (
3
) 的原因是因为您从未调用您定义的ẁhere
函数。相反,您正在计算([1,5],3)
的值,并将其影响到一个名为where
. 的新全局变量
([1,5],3)
的值为“3”的原因是 comma operator。基本上:
([1,5],3)
与
相同[1,5],3
计算 [1,5]
和 3
,return 最后计算的值 (3
)
尝试将最后一行更改为实际的函数调用:
var result = where([1, 5],3);
由于调用 slice 的方式,您会遇到错误;希望通过文档,您应该了解如何使其工作。
此外,正如其他地方所指出的,slice
可能不是您首先要调用的函数。
我想你想要像 dichotomic search 和 arr.splice
这样的东西在正确的位置:
function insertItemInOrderedArray(arr, item, from, to) {
if(from === undefined) from = 0;
if(to === undefined) to = arr.length;
if(from >= to) return arr.splice(from, 0, item), arr;
var m = (from + to) / 2 | 0;
if(arr[m] > item) return insertItemInOrderedArray(arr, item, from, m);
if(arr[m] < item) return insertItemInOrderedArray(arr, item, m+1, to);
return arr;
}
insertItemInOrderedArray([1,5], 3); // [1,3,5]