javascript 不使用unshift方法将项添加到数组开头的函数

8zzbczxx  于 2022-12-21  发布在  Java
关注(0)|答案(5)|浏览(141)

我正在尝试实现一个函数,在不使用unshift或splice方法的情况下将一个项添加到数组的开头,而只是使用array. length。到目前为止,我所做的一切只是覆盖索引0处已经存在的内容。如果有任何帮助,我将不胜感激!

LetsUnshift = function(array) { 
 for (var i = array.length - 1; i >0; i--) {
    array[i +1] = array[i];
 }
 array[0] = item;
};
nr9pn0ug

nr9pn0ug1#

保持相同的引用,您可以使用 *ES 6的 * Array.prototype.copyWithin

var arr = ['b', 'c', 'd'],
    x = 'a';
++arr.length;
arr.copyWithin(1, 0);
arr[0] = x;

arr; // ["a", "b", "c", "d"]

你可以倒车两次,

var arr = ['b', 'c', 'd'];
arr.reverse().push('a');
arr.reverse();

arr; // ["a", "b", "c", "d"]

你可以把整件事重新推一遍,

var arr = ['b', 'c', 'd'],
    a2 = arr.slice();
arr.length = 0;
arr.push('a');
Array.prototype.push.apply(arr, a2);

arr; // ["a", "b", "c", "d"]

可以使用while进行迭代,类似于for

var arr = ['b', 'c', 'd'],
    i = arr.length;
while (i-- > 0)
    arr[i + 1] = arr[i];
arr[0] = 'a';

arr; // ["a", "b", "c", "d"]

如果你的目标是创建一个新的引用,你可以重写后两个中的任何一个,例如:

var arr = ['b', 'c', 'd'],
    a2 = ['a'];
Array.prototype.push.apply(a2, arr);

a2; // ["a", "b", "c", "d"]

如果我们只是在玩代号高尔夫

var arr = ['b', 'c', 'd'],
    a2 = Array.bind(null, 'a').apply(null, arr);

a2; // ["a", "b", "c", "d"]
ymdaylpp

ymdaylpp2#

这应该行得通:

var LetsUnshift = function(array, item) { 
      for (var i = array.length - 1; i >=0; i--) {
         array[i +1] = array[i];
      }
      array[0] = item;
 };

您的代码的问题在于条件i>0,它阻止第一个元素向右移动。

5kgi1eie

5kgi1eie3#

letsUnshift = function(array, itemToAdd) { 
  return array.reduce(function(newArray, value){
    newArray.push(value);
    return newArray;
  }, [itemToAdd]);
};
letsUnshift([2,3,4], 1); //returns [1,2,3,4] and doesn't modify original array
pcww981p

pcww981p4#

只需调用函数,并按照另一个答案中的建议从arr.length-1向下启动到>= 0

var item = 15, i, arr = [11, 23, 33, 54, 17, 89];
LetsUnshift(arr);
function LetsUnshift(arr) {
    for (i = arr.length-1; i >= 0; --i) {
        arr[i + 1] = arr[i];
    }
    arr[0] = item;
};
console.log(arr);

//OUTPUT: [15, 11, 23, 33, 54, 17, 89]
jhdbpxl9

jhdbpxl95#

const array=[1,2,3]
const target=3

function addElementAtStarting(array, target){
    return [target, ...array]
}

相关问题