arr.insert(索引,项)
-
155 请注意,JQuery是一个DOM和事件操作库,而不是自己的语言。 它与数组操作无关。 – 多米诺牌手表 评论 2015年2月18日15:36 -
36 api.jquery.com/jquery.inArray 与DOM或事件无关。 jQuery已经发展成为一个用于浏览器内JS开发的混合工具包,这使得人们期望它有一个用于所有事情的方法。 – 提姆 评论 2016年4月14日8:14 -
8 @Tim,但它仍然不是一种自己的语言(SO上仍然有一些问题,比如“如何在jQuery中对两个数字求和”) – 胜利者 评论 2018年5月7日13:31 -
10 @Victor不,永远不会。jQuery很有用,也很相关,但它有它的一天。 – 提姆 评论 2018年5月8日6:17
34个答案
var arr=[]; arr[0]=“贾尼”; arr[1]=“Hege”; arr[2]=“过时”; arr[3]=“Kai Jim”; arr[4]=“博尔赫”; console.log(arr.join());// Jani、Hege、Stale、Kai Jim、Borge 棱镜拼接(2,0,“Lene”); console.log(arr.join());// 贾尼、海格、莱恩、斯塔尔、凯·吉姆、博尔格
const updated=arr.toSpliced(2,0,“Lene”);
-
266 谢谢,我原以为我会觉得问这个问题很愚蠢,但现在我知道答案了,我不知道! 为什么他们决定称之为splice,而同一个功能通常使用一个更容易搜索的术语?! – 标签2k 评论 2009年2月25日14:46 -
109 -
18 -
76 剪接 可以 插入,但同样频繁 不会 例如: 棱缝(2,3) 将从索引2开始删除3个元素。 不通过第三。。。。 第N个参数未插入任何内容。 所以这个名字 插入() 这也不公平。 – EBarr公司 评论 2014年5月13日1:45 -
23 我认为“拼接”一词很有意义。 拼接意味着连接或连接,也意味着改变。 您已经建立了一个数组,现在您正在“更改”它将涉及添加或删除元素。 您可以指定数组中的起始位置,然后指定要删除的旧项数量(如果有),最后还可以指定要添加的新元素列表。 当然,拼接也是一个很棒的科幻术语。 – 雅库布·凯勒 评论 2014年11月21日15:45
Array.prototype.insert=函数(索引,…项){ this.splice(索引,0,…项); };
var arr=['A','B','E']; arr.insert(2,“C”,“D”); //=>arr==[“A”、“B”、“C”、“D”、“E”]
-
18 要插入多个可以使用的项目 Array.prototype.insert=函数(索引,项){this.splice.apply(this,[index,0].concat(项));} – 瑞安·史密斯 评论 2014年5月30日12:15 -
11 -
27 -
104 -
41
常量项=[1,2,3,4,5] 常量插入=(arr,index,newItem)=>[ //指定索引之前的数组的一部分 …arr.slice(0,索引), //插入的项目 新项目, //指定索引后数组的一部分 …arr.slice(索引) ] const结果=插入(项,1,10) console.log(结果) // [1, 10, 2, 3, 4, 5]
常量项=[1,2,3,4,5] 常量插入=(arr,index,…newItems)=>[ //指定索引之前的数组的一部分 …arr.slice(0,索引), //插入的项目 …新项目, //指定索引后数组的一部分 …arr.slice(索引) ] 常量结果=插入(项,1,10,20) console.log(结果) // [1, 10, 20, 2, 3, 4, 5]
-
4 -
11 -
2 这种方法总是比拼接更慢、更糟糕。 不要被漂亮的甜言蜜语语法或在其他被误导的开发人员中的受欢迎程度所愚弄(*咳嗽*卡扎菲*咳嗽*)。 分配一个全新的数组并丢弃旧数组比修改原始数组要慢得多。 如果你需要副本,请致电 切片() 之前 拼接() 。不要将ES6用于这些琐碎的事情,使用其他API可以做得更好、更干净。 – 千斤顶G 评论 2021年1月19日2:19 -
5 -
5 @JackG别忘了 切片() 将分配一个新的数组, 拼接() 分配一个新的数组,因为它返回一个被删除的项的数组(在这种情况下是一个空数组)。 在这些情况下运行基准测试表明,拼接速度更快(约30%),但我们每秒可以进行数百万次操作,因此除非您的应用程序正在执行 许多 在这些紧密循环的操作中,它不会产生任何影响。 – 刻痕 评论 2021年9月22日9:00
自定义数组 插入
方法
1.具有多个参数和链接支持
/*语法: array.insert(索引,值1,值2,…,值N)*/ Array.prototype.insert=函数(索引){ this.splice.apply(this,[索引,0].concat( Array.prototype.slice.call(参数,1)); 返回此; };
[“a”、“b”、“c”、“d”].插入(2,“X”、“Y”、“Z”).切片(1,6); //[“b”、“X”、“Y”、“Z”、“c”]
2.具有数组类型参数合并和链接支持
/*语法: 数组.insert(索引,值1,值2,…,值N)*/ Array.prototype.insert=函数(索引){ index=Math.min(index,this.length); arguments.length>1 &&this.splice.apply(this,[index,0].concat([].pop.call(arguments)) &&this.insert.apply(this,参数); 返回此; };
[“a”,“b”,“c”,“d”].插入(2,“V”,[“W”,“X”,“Y”],“Z”).连接(“-”); //“a-b-V-W-X-Y-Z-c-d”
-
-
我不明白第一个结果 [“b”、“X”、“Y”、“Z”、“c”] 。为什么不是 “d” 包括? 在我看来,如果你把6作为 切片() 从指定的索引开始,数组中有6个元素,然后应该在返回值中获得所有6个元素。 (医生说 有多少 用于该参数。) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 评论 2014年12月12日2:03 -
实际上,如果我使用的索引为3或更多,则在输出中什么也得不到(情况1.,FireFox) [“a”、“b”、“c”、“d”].插入(2,“X”、“Y”、“Z”).切片(3,3); => [ ] 评论 2014年12月12日2:08 -
-
函数insertAt(数组,索引){ var arrayToInsert=Array.prototype.splice.apply(参数,[2]); return insertArrayAt(数组,索引,arrayToInsert); } 函数insertArrayAt(数组,索引,arrayToInsert){ Array.prototype.splice.apply(Array,[index,0].concat(arrayToInsert)); 返回数组; }
//如果要插入特定值,无论是常量还是变量: 插入At(arr,1,“x”,“y”,“z”); //或者,如果您有一个数组: var arrToInsert=[“x”,“y”,“z”]; 插入数组位置(arr,1,arrToInsert);
解决方案和性能
结论
令人惊讶的是,对于小型阵列,基于 片 和 减少 (D、E、F)通常比就地解决方案快10x100倍 对于大型阵列,基于 剪接 (AI、BI和CI)速度最快(有时约为100倍,但这取决于阵列大小) 对于小型阵列,BI解决方案最慢 对于大型阵列,E解决方案最慢
细节
函数AI(arr,i,el){ arr.splice(i,0,el); 返回arr; } 功能BI(arr,i,el){ 阵列.原型.拼接.应用(arr,[i,0,el]); 返回arr; } 功能CI(arr,i,el){ 数组.原型.拼接.调用(arr,i,0,el); 返回arr; } 函数D(arr,i,el){ 返回arr.slice(0,i).concat(el,arr.slices(i)); } 函数E(arr,i,el){ return[…arr.slice(0,i),el,…arr.scice(i)] } 函数F(arr,i,el){ return arr.reduce((s,a,j)=>(j-i?s.push(a):s.push(el,a),s),[]); } // ------------- //测试 // ------------- 设arr=[“a”,“b”,“c”,“d”,“e”,“f”]; 设log=(n,f)=>{ 设a=f([…arr],3,“新”); 控制台.log(`${n}:[${a}]`); }; log('AI',AI); 日志(“BI”,BI); log(“CI”,CI); 对数('D',D); 对数(‘E’,E); 对数('F',F);
此代码段仅显示测试过的代码(不执行测试)
你可以使用 拼接()
为此
这个 指数 要添加项的数组的 这个 要删除的项目数 ,在本例中是 0 这个 要素 添加
let数组=['项1','项2','项3'] 让insertAtIndex=0 let itemsToRemove=0 array.splice(insertAtIndex,itemsToRemove,'在索引0处插入此字符串') console.log(数组)
-
2 -
7 -
三
Array.prototype.insert=函数(i,…rest){ 此.拼接(i,0,…其余) 把这个还给我 } 变量a=[3,4,8,9]; document.write(“<pre>”+JSON.stringify(a.insert(2,5,6,7))+“</pre>”);
Array.prototype.insert=函数(i,…rest){ 返回this.slice(0,i).concat(rest,this.slie(i)); } 变量a=[3,4,8,9], b=a.insert(2,5,6,7); console.log(JSON.stringify(a)); console.log(JSON.stringify(b));
-
4 “一个完全没有意义的空数组”-当第二个参数为0时,它只返回一个空数组。 如果大于0,则返回从数组中删除的项。 考虑到您要添加到原型中,并且 剪接 改变原始数组,我认为“适当的函数编程”不属于 剪接 . – 克里斯巴乔林 评论 2016年5月22日21:15 -
我们在这里讨论的是insert,Array.prototype.splice()的第二个参数必须为零。 它返回的内容除了“我没有删除任何内容”之外没有其他意义,因为我们使用它来插入项目,所以我们已经有了这些信息。 如果您不想改变原始数组,那么可以使用两个array.prototype.slice()和一个Arrary.protocol.concat()操作进行同样的操作。 这取决于你。 – 雷杜 评论 2016年5月22日21:23 -
1 -
1 我认为值得一提的是,其余参数是新的ECMA第6个参数( developer.mozilla.org/en/docs/Web/JavaScript/Reference/… ) – 格扎·图里 评论 2016年12月9日17:02
方法通过删除 现有元素和/或添加新元素。
常数arr=[1,2,3,4,5];
arr.plice(arr.indexOf(3),1);
[1, 2, 4, 5]
棱缝(2,0,3);
棱缝(2、2、3);
[1, 2, 3, 5];
数组.splice(start,deleteCount,item1,item2,item3…)
const数组=['My','name','Hamza']; array.splice(2,0,'is'); console.log(“方法1:”,array.join(“”));
Array.prototype.insert=函数(索引,项){ this.splice(索引,0,项); }; const数组=['My','name','Hamza']; array.insert(2,'is'); console.log(“方法2:”,array.join(“”));
//附加到特定位置(此处为索引1) arrName.拼接(1,0,'newName1'); //1:索引编号,0:要删除的元素编号,newName1:新元素 //附加到特定位置(此处为索引3) arrName[3]='newName1';
//从索引编号1追加 arrName.splice(1,0,‘newElemenet1’,‘newElemenet2’,‘newElemenet3’); //1:从追加开始的索引编号, //0:要删除的元素数, //newElemenet1,2,3:新元素
const arr=[“苹果”,“桔子”,“覆盆子”]; 常数arr2=[1,2,4]; 常量插入=(arr,item,index)=> arr.reduce(函数(s,a,i){ i===指数? s.push(项目,a):s.push; 返回s; }, []); 控制台.log(插入(arr,“香蕉”,1)); 控制台.log(插入(arr2、3、2))
var jsonb_str='{“one”:{“abbr”:“”,“order”:3},“two”:{abbr:“”; var jsonb_obj=JSON.parse(jsonb_str);
var obj_length=对象.keys(jsonb_obj).length; var sorted_array=新数组(obj_length);
for(Object.keys(jsonb_obj)的var键){ 变量tobj={}; tobj[key]=jsonb_obj[key]。abbr; var位置=jsonb_obj[key].order-1; sorted_array[position]=待定; } 控制台.dir(sorted_array);
不可变插入
函数插入(数组、索引){ const items=Array.prototype.slice.call(参数,2); return[].concat(array.slice(0,index),items,array.slice(index)); } 常量列表=['one','two','three']; const list1=插入(list,0,'zero');// 插入单个项目 const list2=插入(list,3,'four','five','sive');// 插入多个 console.log('原始列表:',list); console.log('插入的列表1:',列表1); console.log('插入的列表2:',列表2);
功能相同(左、右){ return JSON.stringify(左)===JSON.stringify(右); } 函数包含(数组,obj){ 设count=0; array.map((cur)=>{ if(this.isIdentive(cur,obj)) 计数++; }); 返回计数>0; }
函数插入(arr、val、index){ 返回索引>=arr.length ? arr.concat(有效值) :arr.reduce((prev,x,i)=>prev.concat(i===索引?[val,x]:x),[]); }
让ifExist=(item,strings=[“”],position=0)=>{ //输出到带有空字符串的数组中。重要的是以防它们不是任何项。 让输出=[“”]; //检查要定位的项目是否存在。 if(项目){ //输出应等于字符串数组。 输出=字符串; //使用splice()可以断开数组。 //使用位置参数来说明放置项目的位置 //0表示不替换索引。 物品是我们放置在指定位置的实际物品。 输出。拼接(位置,0,项); } //空字符串是为了不与逗号或其他任何东西连接。 返回output.join(“”); };
ifExist(“好友”,['(',')'],1)}//输出:(好友) ifExist(“friends”,['-'],1)}//输出:-friends ifExist(“好友”,[':'],0)}//输出:好友:
阵列原型。 插入=函数(项,前面){ if(!item)返回; if(before==null||before<0||bevere>this.length-1){ this.push(项目); 回报; } this.splice(前,0,项); } var t=[“a”,“b”] t.插入(“v”,1) 控制台.log(t)
-
6 -
三
// 0 1 2 常量字母=[“A”、“B”、“D”]; const insertIndex=2;// 数组中要插入的位置 const correctLetters=字母.to拼接(insertIndex,0,“C”);// 0表示不删除任何项目,只插入即可。 “C”是要插入的项。 console.log(correctLetters);// [“A”,“B”,“C”,“D”](新数组包含新字符) console.log(字母);// [“A”、“B”、“D”](未修改)
.to拼接(插入索引,0,“C”,“D”,“E”);
//假设我们有一个数组 让myArray=[2,4,6,8,10]; //要插入项目的索引 让indexToInsert=3; //我们要插入的项 让itemToInsert=174; //现在我们使用splice()方法在指定索引处插入项 myArray.splice(indexToInsert,0,itemToInsert); //具有新值的输出 console.log(myArray);
导出常量insertItemInList=<T>( arr:T[], 索引:数字, 新项目:T ):T[]=>[…arr.slice(0,索引),newItem,…arr.scice(索引)]
常量插入=(what,where,index)=> ([…where.slice(0,index),what,…where.slice(index,where.length)]);
常量插入=(what,where,index)=> ([…where.slice(0,index),what,…where.slice(index,where.length)]); 常数列表=[1,2,3,4,5,6]; const newList=插入('a',list,2); console.log(newList.indexOf('a')===2);
函数add_items_to_array_atposition(数组、索引、新项) { return[…array.slice(0,index),…new_items,…array-slice(index)]; }
设old_array=[1,2,5]; 设new_array=add_items_to_array_at_position(old_array,2,[3,4]); console.log(new_array); //输出:[1,2,3,4,5]