有没有一种方法可以用一个重复的元素替换单个数组元素?

时间:2019-01-30 02:16:08

标签: javascript arrays

我正在尝试将每个索引重复一个元素替换为数组的元素。

例如 ['12','a','drink','cookie']成为['0','0','0','0']

我正在学习基本的JavaScript,并试图弄清楚该如何做。我已经尝试过forEach()splice(),但我始终只获得一个索引(例如['0'])。我觉得我可以用for循环来解决这个问题,但是要输入什么呢?下面的代码是我最近的工作,但是没有运行。

function replace()
{
    var Word = 'test';
    var newWordArray = Array.from(Word);

    for (var i = 0; i < newWordArray.length; i++); {
        i = '0';
    }
}

我希望['0','0','0','0']作为输出,但是在尝试运行该函数时却未定义。

6 个答案:

答案 0 :(得分:1)

您的代码有几个问题:

  1. i = '0'并没有按照您认为的去做。 i这里只是一个数字,代表数组中的索引。更改i不会执行任何操作,因为您不会使用i本身的值执行任何操作。相反,您需要更改索引i处的元素。您可以通过执行newWordArray[i] = 0来实现。这样,您说的是更改数组i中索引newWordArray处的元素。

  2. 您不会从函数中返回任何内容。为了使函数一旦被调用就被分配一个值,您需要return所说的值。因此,当您希望函数调用输出(返回)新数组时,需要在函数末尾return newWordArray

  3. 尽管不是必需的,但我建议您在函数中添加一个名为word的参数。这样,函数可以接受字符串(或数组)并为您提供所需的输出。

请参见下面的工作示例:

function replace(word) { // accept a word as an input to use in your function
  var newWordArray = Array.from(word); // create an array of characters from your inputted word
  for (var i = 0; i < newWordArray.length; i++) { // remove ';' colon here
    newWordArray[i] = 0; // Set every element (by accessing it using its index 'i') to 0
  }
  return newWordArray; // output (return) the new array
}

console.log(replace("test")); // input "test" as the word variable
console.log(replace(['12','a','drink','cookie']));

还要注意,Array.from([1, 2, 3])将返回数组。因此,以上内容对字符串和数组均有效。

或者,要实现与上述相同的目的的另一种方法是使用Array.prototype.fill()。在这里,我将ES6 arrow functionsdestructing assignment一起使用:

[1, 2, 3]

答案 1 :(得分:1)

Nick Parsons ,已经很好地解释了如何更改代码以实现目标,但是,由于您已经在使用Array::from(),因此可以使用mapFn参数并简化代码,例如:

const replace = (word, replaceVal) => Array.from(word, x => replaceVal);

console.log(replace("word", 0));
console.log(replace("Hello World", 5));

答案 2 :(得分:0)

您只需将其分配给数组中的每个元素:

for (var i = 0; i < newWordArray.length; i++); {
    newWordArray[i] = '0';
}

您正在将值分配给迭代器。

答案 3 :(得分:0)

此处的数组映射会缩短您的代码

var Word = 'test';
//var newWordArray = Array.from(Word);
let j=Array.from(Word).map(a=>a='0');
console.log(j)

答案 4 :(得分:0)

Spread语法(ES6)也适用!请务必遵守文档中所述的浏览器兼容性。

function replace() {
  const Word = 'test';

  const newWordArray = [...Word];
  //console.log(newWordArray)
  return newWordArray.map(a => a='0')
}

console.log(replace())

答案 5 :(得分:0)

我更喜欢splice和forEach实现这一目标

var contents = ['a','b','c','d'];
document.getElementById('LW').value = contents 

contents.forEach(function(element, index) {
    contents.splice(index, 1, "0");
});