【问题标题】:How to replace elements in an array given specific indexes of the elements?给定元素的特定索引,如何替换数组中的元素?
【发布时间】:2019-06-23 23:56:44
【问题描述】:
var array = ['odd', 'odd', 2, 8, 'odd', 4];
var oddArr = [1, 3, 5];

如何用oddArr中的元素替换数组中的'odd',以便

var newArr = [1, 3, 2, 8, 5, 4];

?

【问题讨论】:

标签: javascript arrays


【解决方案1】:

循环遍历数组,如果找到 odd 将其替换为 oddArr 中的元素,使用 array.shift()

const array = ['odd', 'odd', 2, 8, 'odd', 4];
const oddArr = [1, 3, 5];

const result = array.map(e => e === 'odd' ? oddArr.shift() : e)

console.log(result)

【讨论】:

  • 虽然这正确回答了问题,但请注意这会改变 oddArr。有些人可能不期望或不想要这个后置条件。
  • 如果奇数大于奇数数组的长度怎么办?
  • @G.aziz 然后result 将有undefined 条目。对于调用 this 的这种无效前提条件,这是可以接受的行为。
【解决方案2】:

您可以使用map 和这样的索引变量:

var array = ["odd", "odd", 2, 8, "odd", 4];
var oddArr = [1, 3, 5];

let currentIndex = 0;
const newArray = array.map(a => a === 'odd' ? oddArr[currentIndex++] : a)

console.log(newArray)

【讨论】:

  • 这应该是公认的答案。没有副作用的简单而优雅的解决方案。
  • 是的,我同意 - 这是我自己的答案的一个更简洁的版本。 (我还没有想出如何只使用map,但这很有意义。)
【解决方案3】:

您可以关闭索引,而无需更改 oddArr

const
    array = ['odd', 'odd', 2, 8, 'odd', 4],
    oddArr = [1, 3, 5],
    result = array.map((i => v => v === 'odd' ? oddArr[i++] : v)(0));

console.log(result);

【讨论】:

  • 这个闭包比我添加的丑陋的闭包要整洁得多:(i=> array.map(v => v === 'odd' ? oddArr[i++] : v))(0)
【解决方案4】:

你可以用一个简单的循环来做到这一点:

var array = ["odd", "odd", 2, 8, "odd", 4];
var oddArr = [1, 3, 5];

var result = [], i = 0;
array.forEach(function(x) {
  if (x === "odd") {
    result.push(oddArr[i]);
    i++;
  }
  else {
    result.push(x);
  }
});

console.log(result);

(请注意,我已将odd 替换为字符串"odd",如果odd 是一个实变量,那么您可以在上面的代码中使用它。)

【讨论】:

    【解决方案5】:

    odd 应该包含在'' 中。

    var array = ['odd', 'odd', 2, 8, 'odd', 4];
    var oddArr = [1, 3, 5];
    //lopping through array
    for(let i = 0;i<array.length;i++){
        //check if item at i is odd
    	if(array[i] === 'odd'){
            //oddArr.shift() returns the first element and also removes it.
    		array[i] = oddArr.shift();
    	}
    }
    console.log(array);

    【讨论】:

      【解决方案6】:

      使用 forEach() 循环遍历数组,并通过从oddArr 中交叉一个来更改奇数值,并创建索引计数器 (x),如下所示

      var array = ["odd","odd", 2, 8, "odd", 4];
      var oddArr = [1, 3, 5];
      var x=0;
      array.forEach(function(v,i){
       if(array[i]=="odd")
       {array[i]=oddArr[x]; x++;}
       });
       console.log(array);
      

      【讨论】:

        猜你喜欢
        • 2017-08-06
        • 2015-01-03
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多