代码之家  ›  专栏  ›  技术社区  ›  batman091716

如何在数组中找到某个元素并对其进行更改?

  •  0
  • batman091716  · 技术社区  · 6 年前

    我需要创建一个函数来查找元素“tolkn”,并将其更改为“tolken”。

    changeName = (arr) => {
      if (arr === "Tolkn") {
        arr.push("Tolkien")
      }
      return arr;
    }
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Saeed    6 年前

    像这样修改你的函数

    let arr = ['test', 'test2', 'Tolkn', 'test3'];
    
    
    let changeName = (inpArr) => {
      let index = inpArr.findIndex(function(itm) {
        return itm == 'Tolkn';
      })
      if (index === -1) {
        return inpArr;
      }
      inpArr[index] = 'Tolkien';
      return inpArr;
    };
    
    console.log(changeName(arr));

    另一种方式 forEach

    let arr = ['test', 'test2', 'Tolkn', 'test3'];
    
    function changeName(arr) {
      let output = [];
      arr.forEach(function(itm) {
        if (itm == "Tolkn") {
          output.push("Tolkien")
        } else {
          output.push(itm);
        }
      });
      return output;
    }
    
    console.log(changeName(arr));
        2
  •  1
  •   Vasan    6 年前

    使用正确的值制作一份副本(由于@mattmargan,现在的格式更加简洁)。

    var arr = ["Tolkn","a","some","Tolkn"];
    var changeName = arr.map.bind(arr, elem => elem === "Tolkn" ? "Tolkien" : elem);
    arr = changeName(arr);
    console.log(arr);

    或就地更换:

    var arr = ["Tolkn","a","some","Tolkn"];
    var changeName = arr.forEach.bind(arr, (val, ind) => {arr[ind] = (val === "Tolkn" ? "Tolkien" : val)});
    changeName(arr);
    console.log(arr);
        3
  •  0
  •   Slai    6 年前

    短版如果你不介意可能隐藏的“-1”属性:

    let changeName = arr => (arr[arr.indexOf("Tolkn")] = "Tolkien", arr)
    
    console.log( changeName( ['Tolkn'] ) )  // ['Tolkien']
    console.log( changeName( ['Talkn'] ) )  // ['Talkn']