![](/img/trans.png)
[英]How to match a number with the numbers in array in vanilla JavaScript?
[英]Vanilla Javascript unique numbers in array with reduce and find
我正在嘗試使用reduce和find helper來編寫一個數組函數,該函數返回一個唯一數字數組。
var numbers = [1, 1, 2, 3, 4, 4]; // function should return [1, 2, 3, 4] function unique(array) { array.reduce((uniqueArray, number) => { if (uniqueArray.indexOf(find(array.number))) { uniqueArray.push(array.number); } return uniqueArray; }, []); } console.log(unique(numbers)); // undefined // undefined
運行此代碼時,我得到了
未定義
兩次在瀏覽器Javascript控制台中。
以前的答案解釋了錯誤的原因。 所以我只是添加了一個使用Array#filter
方法的替代方法。
var numbers = [1, 1, 2, 3, 4, 4]; // function should return [1, 2, 3, 4] function unique(array) { return array.filter(function(v, i, arr) { // compare index with first element index return i == arr.indexOf(v); }) } console.log(unique(numbers));
具有ES6箭頭功能。
var numbers = [1, 1, 2, 3, 4, 4]; // function should return [1, 2, 3, 4] function unique(array) { return array.filter((v, i, arr) => i == arr.indexOf(v)) } console.log(unique(numbers));
更新:使用引用對象而不是檢查索引。
var numbers = [1, 1, 2, 3, 4, 4], ref = {}; function unique(array) { return array.filter(function(v) { if (!(v in ref)) { ref[v] = true; return true; } return false; }) } console.log(unique(numbers));
您需要一份退貨聲明。
return array.reduce((uniqueArray // ...
// ^^^
還有一些更好的Array.indexOf
查找方法
function unique(array) { return array.reduce((uniqueArray, number) => { if (uniqueArray.indexOf(number) === -1) { uniqueArray.push(number); } return uniqueArray; }, []); } var numbers = [1, 1, 2, 3, 4, 4]; console.log(unique(numbers));
現在使用Set
和spread語法...
來收集新數組中的項目。
function unique(array) { return [... new Set(array)]; } var numbers = [1, 1, 2, 3, 4, 4]; console.log(unique(numbers));
你幾乎沒有錯誤。 首先,您需要從函數返回值,並檢查元素是否已經在uniqueArray
您可以使用indexOf()
== -1
。
var numbers = [1, 1, 2, 3, 4, 4]; function unique(array) { return array.reduce((uniqueArray, number) => { if (uniqueArray.indexOf(number) == -1) uniqueArray.push(number) return uniqueArray; }, []); } console.log(unique(numbers));
使用ES6 / 7,您可以使用includes()
和箭頭功能。
var numbers = [1, 1, 2, 3, 4, 4]; function unique(arr) { return arr.reduce((r, n) => (!r.includes(n) ? r.push(n) : 1) && r , []); } console.log(unique(numbers));
您始終可以使用Array.includes
。
function SillyFunctionName(array) {
"use strict";
var uniqueArray = [];
for (var i = 0; i < array.length; i++) {
if (uniqueArray.includes(array[i])) {
break;
} else {
uniqueArray.push(array[i]);
}
}
return uniqueArray;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.