没有真正为Javascript找到解决方案。 我需要的;我想将一个元素插入一个数组,但不是真的覆盖该元素。而是一个“动态”插入。因此,插入元素,然后将其下面的所有元素移动+1索引。
例如:
I have an array "14S" "16S" "19S".
I know want to insert "15S".
The resulting array: "14S" "15S" "16S" "19S"
我尝试了什么:
fullName = "15S"
low = 5;
cardsS[low] = fullName;
for (var i = low; i < cardsS.length; i++) {
cardsS[i + 1] = cardsS[i];
}
答案 0 :(得分:16)
如果您知道要将元素插入的位置:
使用splice方法。它很便宜,工作方式与你想要的完全一样。您还可以一次插入多个元素:
var strings = ["14S", "16S", "19S"];
strings.splice(1,0,"15S");
结果
"14S" "15S" "16S" "19S"
如果您不希望以特定方式对数组进行排序,则还应使用此解决方案。
如果您不知道要将元素插入的位置:
您必须使用push / sort组合,提供自己的排序算法(除非标准排序足够)
var strings = ["14S", "16S", "19S"];
strings.push("15S");
strings.sort(function(a, b){
if (a is less than b by some ordering criterion)
return -1;
if (a is greater than b by the ordering criterion)
return 1;
// a must be equal to b
return 0;
});
答案 1 :(得分:4)
您可以使用Array.splice
插入值:
var arr = ["14S","16S","19S"];
arr.splice(1,0,"15S");
// ^position after which to insert
// ^number of elements to delete (none here)
// ^value to insert ("15S" here)
// => arr is now ["14S","15S","16S","19S"]
如果您不知道该职位,可以使用Array.indexOf
来确定该职位:
var arr = ["14S","16S","19S"];
arr.splice((arr.indexOf('14S')>-1 && arr.indexOf(after)+1 || 0),0,"15S");
// ^use indexOf result if applicable or just insert
// (so, if no position, this turns into unshift ;)
您可以为它创建一个方法:
function arrayInsertAfter(array, after, value){
after = array.indexOf(after)>-1 && array.indexOf('14S')+1 || 0;
array.splice(after, 0, value);
return array;
}
// usage
var arr = arrayInsertAfter(["14S","16S","19S"],"14S","15S");
// => ["14S","15S","16S","19S"]
答案 2 :(得分:3)
您只需使用push()
然后使用sort()
函数:
var yourArray = ['14S', '16S', '19S'];
yourArray.push('15S');
yourArray.sort();
答案 3 :(得分:2)
答案 4 :(得分:2)
你想要的是原生数组对象上的 splice 函数。
var arr = [];
arr[0] = "14S";
arr[1] = "16S";
arr[2] = "19S";
arr.splice(2, 0, "15S");
console.log(arr.join());
The resulting array: 14S, 16S, 15S, 19S
答案 5 :(得分:1)
如果你这样做,你将从cardsS [5]开始,其值为“fullName”。 事实是你的牌是4个值,所以你的数组是0到3.你可以看到你位置4的数组是未绑定的。
此外,如果你做了牌[[i + 1],那么你将处于第6位,这也是非约束力。
你要做的是:
如果您不想这样做,您可以使用Splice功能,只需检查它,或使用javascript库中的排序功能。
希望这可以帮到你!
答案 6 :(得分:0)
试试这个:
fullName ="15S"
cardsS = ["14S", "16S", "19S"];
for (var k in cardsS)
{
if(parseInt(fullName) < parseInt(cardsS[k])){
cardsS.splice(k,0,fullName)
break;
}
}
:)
如果你认为更好:
fullName ="15S"
cardsS = ["14S", "16S", "19S"];
for (var k = 0; cardsS.length > k; k++)
{
if(parseInt(fullName) < parseInt(cardsS[k])){
cardsS.splice(k,0,fullName)
break;
}
}
答案 7 :(得分:0)
在您的一条评论中,您询问了拼接方法和推送+排序方法之间的区别。
Splice只会切断您的数组并根据索引插入/删除值。 使用上面提到的例子:
var strings = ["14S", "16S", "19S"];
strings.splice(1,0,"15S");
这将把“15S”放在索引1上。这就是为什么有一句话“如果你不知道你想要将元素插入的位置:”
在这种情况下,推+排序方法发挥作用。此时,您无需计算元素数量并确保将所有内容放在正确的位置。 你只需要在数组末尾推送你的“15S”,然后让sort()自动为你排序。
这个,授予你的数组确实可以排序。有些设置实际上并不允许你对数组进行排序(就像在彩虹中按颜色排序的颜色......你不能只使用sort()对它们进行排序)。
在这种情况下,KooiInc的回应开始发挥作用。此时,您知道您的商品需要在哪里。 15S在14S之后出现,因此您搜索14S,获取该索引,并使用该索引进行拼接。 此时你还需要自己计算一下15S必须遵循的元素 - 在我的彩虹示例中,你必须主动记住你想要根据阵列中的颜色“插入”哪种颜色。
在你的例子中,这些值似乎适合于正常的排序,所以我会选择一些人提到的Push +排序方法。
答案 8 :(得分:0)
var arr = [1,2,4,5,6];
var element = 3, pos=3;
for(i=arr.length-1; i>=pos-1; i--){
arr[i+1]=arr[i];
}
arr[pos-1]=element;
console.log(arr);