问题描述
有人可以向我解释为什么我的代码不起作用吗?
应该将第二个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,所以我的知识有限。 任何建议或帮助都非常感谢。
1楼
EmptyArsenal
1
已采纳
2015-07-26 21:10:07
这里有一些问题。
-
方法必须通过数组调用。
即
arr.slice()
而slice(...)
将抛出错误。 -
slice
不添加到数组中。 它从数组中删除。 您需要使用splice
。 -
像您一样在此处使用
for
循环并不是最好的方法,因为在插入元素后,它将继续进行。 本质上,您想将元素插入到有序列表中吗? 如果是这样,请在插入元素或使用break
立即return
功能。
您的函数可能如下所示:
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]
2楼
phtrivier
0
2015-07-26 21:10:17
我不确定您要在这里做什么,但是:
我认为“切片”功能无法实现您所期望的; 您应该在Array上调用它,请参见 ,它会返回一个新数组,因此您必须将结果分配给某些对象
但是,只看到(
3
)的原因是因为您从未调用定义的?here
函数。 相反,您正在计算([1,5],3)
,并将其影响到名为where
的新全局变量。
([1,5],3)
值为“ 3”的原因是由于 。
基本上:
([1,5],3)
是相同的
[1,5],3
会同时评估[1,5]
和3
,并返回最后的评估值( 3
)
尝试将最后一行更改为实际的函数调用:
var result = where([1, 5],3);
由于如何调用slice,您将得到错误; 希望与文档一起您应该了解如何使其工作。
另外,正如其他地方所指出的那样, slice
可能不是您首先要调用的函数。
3楼
Oriol
0
2015-07-26 21:11:46
我认为您希望在正确的位置进行和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]