【问题标题】:Make array numbers negative使数组数字为负
【发布时间】:2019-01-20 11:12:00
【问题描述】:

我正在尝试将所有数组数字返回为负数 (* -1); 我被困住了。请帮忙!

function makeListNegative (array){
  for(i=0; i <array.length; i++);
    return i * -1;
  }

var negativeList = makeListNegative([7, 2, 3, 4]);
console.log(negativeList);

此函数仅将数组中的最后一个数字返回为 -4。我希望显示所有列表编号。

【问题讨论】:

    标签: javascript arrays function negative-number


    【解决方案1】:
    function makeListNegative (array) {
        for (i = 0; i < array.length; i++); // 1
        return i * -1;                      // 2
    }
    
    1. 您的 for 语句会迭代(在正确的范围内以正确的间隔),但在行尾使用分号,它不执行任何操作。

    2. 然后你返回i的负值,也就是数组的长度,不是数组的值,也不是全部为负值的数组。


    如果您喜欢使用传统方法,您可以将每次迭代中的值推送到一个新数组,并在迭代后返回新数组。

    function makeListNegative(array) {
        var i, l,
            temp = [];
    
        for (i = 0, l = array.length; i < l; i++) {
            temp.push(-array[i]);
        }
    
        return temp;
    }
    
    var negativeList = makeListNegative([7, 2, 3, 4]);
    
    console.log(negativeList);

    您可以使用Array#map 映射负值。

    function makeListNegative(array) {
        return array.map(v => -v);
    }
    
    var negativeList = makeListNegative([7, 2, 3, 4]);
    
    console.log(negativeList);

    【讨论】:

    • 不需要push,因为传入的数组不需要保留
    【解决方案2】:

    您需要将值映射为负值。

    function makeListNegative(array) {
      return array.map(x => x * -1);
    }
    
    var negativeList = makeListNegative([7, 2, 3, 4]);
    
    console.log(negativeList);

    【讨论】:

      【解决方案3】:

      你的代码

      • 每次迭代都返回
      • 分号放错了地方
      • 将索引设为负数而不是数组项

      本来可以这样解决的

      function makeListNegative(array) {
        for (var i = 0; i < array.length; i++) { // make i local
          array[i] *= -1; // negate the array item
        }
        return array; // return the manipulated array
      }
      
      var negativeList = makeListNegative([7, 2, 3, 4]);
      console.log(negativeList);

      或者使用Array.map - 在标准 JS 中 - 粗箭头 =&gt; 是 ES6+,在 IE 中不起作用

      var negativeList = [7, 2, 3, 4].map(function(num) { return -num })
      console.log(negativeList);

      【讨论】:

        【解决方案4】:

        这将不起作用,因为您是来自 for 循环的 returning。尝试使用

        Array.map()

        【讨论】:

          【解决方案5】:

          你可以使用map来返回负值

          var negativeList=  [7, 2, 3, 4].map(function(value){
            return -v;
          })
          

          【讨论】:

            【解决方案6】:

            既然大家都用map解决了这个问题,下面就来看看如何用[forEach][1]解决,

            var makeNeg = function(arr){
              arr.forEach(function(value, index){
                arr[index] = arr[index]*-1;
              });
              return arr;
            }
            
            console.log(makeNeg([7, 2, 3, 4]))

            【讨论】:

            • 无需推送。传入的数组可以直接操作
            • 这是不理想的变异数据。您希望尽可能避免突变,以便您的代码保持“纯粹”且更易于测试。
            【解决方案7】:

            您可以使用 ES6 语法打动您的高级开发人员:

            const makeListNegative = array => array.map(num => -num)
            
            const negativeList = makeListNegative([7, 2, 3, 4]);
            console.log(negativeList);
            

            如果你不想创建函数:

            const negativeList = [7, 2, 3, 4].map(num => -num);
            console.log(negativeList);
            

            如果您在项目中使用 Babel 或 Typescript,则无需担心 IE 支持,因为您的代码将被转译为 ES5,并且将在所有浏览器上得到支持。

            【讨论】:

            • 不久前我被否决了——也许是你?如果是,为什么?
            • @mplungjan ,不是我,事实上我之前对你的一个 cmets 投了赞成票。
            • 好吧,没问题,你在我被否决的同时编辑了你的答案,我们得到了相同的答案
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-18
            • 1970-01-01
            • 1970-01-01
            • 2022-01-20
            • 1970-01-01
            • 2010-10-04
            • 2016-04-13
            相关资源
            最近更新 更多