【问题标题】:How can I use underscore's _.uniq function to help log even and odd numbers?如何使用下划线的 _.uniq 函数来帮助记录偶数和奇数?
【发布时间】:2017-07-29 19:54:57
【问题描述】:

我对 JavaScript 还是很陌生,但这就是我目前所掌握的。我正在尝试使用下划线以两批独特的偶数和奇数将其打印到控制台,我想我已经完成了 90% 的工作,但我碰壁了。

var arr = ([1,3,5,2,0,4,5,2,9,9,8,2]);            
sort(arr);

function sort(arr) {

var evens = [];
var odds = [];                        
for(var i = 0; i < arr.length; i++) {            
    if(arr[i] % 2 ){            
        odds.push(arr[i]);            
    } else if(!(arr[i] % 2)) {            
        evens.push(arr[i]);            
}            
}            

console.log("ODD NUMBERS:" + " " + odds);            
console.log("EVEN NUMBERS:" + " " + evens);            
if(_.uniq(evens).length != evens.length || _.uniq(odds).length != odds.length){            
console.log("FAIL!");            
}             
}

【问题讨论】:

  • 你碰到的墙到底是什么?您应该看到“失败!”每次因为您的输入数组有重复(偶数和奇数),所以uniq 长度永远不会与排序长度相同。你看到了什么,你期待看到什么?
  • 嗨,斯科特-我将两个列表打印到控制台,日志中包含所有偶数或奇数,以及一个告诉我 ReferenceError: _ is not defined 的错误(使用 CodePad) .我希望没有错误,并且两个列表都以唯一值打印到控制台。
  • 该错误意味着未加载下划线。我有一段时间没有使用 CodePad,但我确信有一种方法可以包含库。在 JSFiddle 中,它位于左侧。找到后,您需要为下划线添加一个 url,例如:cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/…
  • 另外,您在调用 _.uniq 方法之前打印数组。您需要将oddsevens 包装在_.uniq() 中以从完整数组中获取唯一数组。
  • 谢谢!你一直很有帮助,但还有一件事 - 正如我所说我是超级新人,我不太清楚你在 uniq 中包含偶数和赔率是什么意思。你愿意给我举一个例子吗?

标签: javascript arrays sorting underscore.js unique


【解决方案1】:

arr[i] % 2if 条件下计算为0false

if (arr[i] % 2 === 0) { 
  // even
} else {
  // not even
}    

【讨论】:

【解决方案2】:

不确定我是否满足您的要求,但您可以使用 ES6 来做到这一点。

filter method 在大多数浏览器中得到广泛支持,并允许以更具声明性的方式剖析数组。

const arr = [1,3,5,2,0,4,5,2,9,9,8,2]; 
const isEven = el => el % 2 === 0;
const isOdd = el => el % 2 !== 0;
const evens = arr.filter(isEven);
const odds = arr.filter(isOdd);
console.log(`Unique evens: ${_.uniq(evens)}`); // => "Unique evens: 2,0,4,8"
console.log(`Unique odds: ${_.uniq(odds)}`); // "Unique odds: 1,3,5,9"

【讨论】:

    【解决方案3】:

    第一个问题:ReferenceError: _ is not defined.
    确保 &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"&gt;&lt;/script&gt; 在您的 html 文件中的某个位置,或者以其他方式在您的 JS 文件中需要下划线。

    第二个问题:“我希望没有错误,并且两个列表都以唯一值打印到控制台。”
    这不会发生,因为您尚未在数组上调用 uniq 函数。只需用_.uniq() 包装这两个数组,如下所示:

    console.log("ODD NUMBERS:", _.uniq(odds));
    console.log("EVEN NUMBERS:", _.uniq(evens));
    

    或者,您可以在对输入数组进行排序之前调用_.uniq,从而节省排序时的处理时间。

    不管怎样,假设定义了下划线,你应该得到你预期的结果。

    【讨论】:

      【解决方案4】:

      首先您需要过滤数组(偶数或奇数),然后应用 _.uniq

      var arr = [1,3,5,2,0,4,5,2,9,9,8,2];
      
      var evens = _.filter(arr, function(num){ return num % 2 == 0; });
      var odds = _.filter(arr, function(num){ return num % 2 != 0; });
      
      console.log("EVEN NUMBERS: "+_.uniq(evens));
      console.log("ODD NUMBERS: "+_.uniq(odds));
      &lt;script src="http://underscorejs.org/underscore-min.js"&gt;&lt;/script&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-14
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多