配列の重さをなくす方法--まとめ編
3183 ワード
参考:配列の重量除去の6つの方法
一、forループの使用
配列については,forループでは解決できない問題は何もない.でもbiggerは足りないですね.
1 == true false== [] undefined == null false == 0
以上の問題を解決するにはObjectを使用します.is(arr[i],arr[j])の方法でarr[i]==arr[j]を置き換えると,NaNを除去したり,タイプ変換を防止したりすることができる.
Objectを拡張するis()
リンクMDNの両方の値は です.の両方の値は です.の2つの値はいずれも である.の2つの値は、同じ数の文字から同じ順序で構成される文字列 である.の2つの値は、同じオブジェクト を指す.の2つの値は数値であり、 はいずれも正零 である.はいずれも負の である.はいずれも ですはいずれもゼロと である.
二、indexOfの使用
indexOf()を使用して、1つの配列に値が含まれているかどうかを判断し、存在する場合はその要素の配列内の位置を返し、存在しない場合は-1を返します.
この方法はまだNaN,{},[]を取り除いていない.
三、includes()の使用
includes()メソッドを使用して、配列に特定の要素が含まれているかどうかを判断し、含まれている場合はtrueが含まれていない場合はfalseを返します.
四、filter()の使用
filter()メソッドは、指定した配列の条件に合致するすべての要素をチェックする新しい配列を作成します.またfilter()は配列を変更したり、空の配列を検出したりしません.filter()メソッドはコールバック関数を受信します.
array.filter(function(item,index,arr)、this Value)itemは必須です.現在の要素の値indexはオプションです.現在の要素のインデックス値arrはオプションです.現在の要素が属する配列オブジェクト
五、setを使う
一、forループの使用
配列については,forループでは解決できない問題は何もない.でもbiggerは足りないですね.
function unique(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i+1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j,1)
j--
}
}
}
return arr
}
let arr = [1,1,'true','true', 'a', 'a',true,true,false,false, undefined,undefined, null,null, NaN, NaN,'NaN','NaN', 0, 0,{},{},[],[]];
console.log(unique(arr)) // [ 1, 'true', 'a', false, undefined, NaN, NaN, 'NaN', {}, {} ]
==
を使用して比較すると、タイプ変換が発生するため、1 == true false== [] undefined == null false == 0
以上の問題を解決するにはObjectを使用します.is(arr[i],arr[j])の方法でarr[i]==arr[j]を置き換えると,NaNを除去したり,タイプ変換を防止したりすることができる.
===
,but,+0 === -0 //true
NaN === NaN //false
Object.is(NaN,NaN)//true
Objectを拡張するis()
リンクMDN
Object.is()
を参照して、2つの値が同じか否かを判定する.次のいずれかが成立している場合、2つの値は同じです.undefined
null
true
またはfalse
の+0
-0
NaN
NaN
を除く他の同じ数字二、indexOfの使用
indexOf()を使用して、1つの配列に値が含まれているかどうかを判断し、存在する場合はその要素の配列内の位置を返し、存在しない場合は-1を返します.
function unique(arr) {
let res = []
for (let i = 0; i < arr.length; i++) {
if (res.indexOf(arr[i]) === -1) {
res.push(arr[i])
}
}
return res
}
console.log(unique(arr)) //[ 1, 'true', 'a', true, false, undefined, null, NaN, NaN, 'NaN', 0, {}, {}, [], []]
この方法はまだNaN,{},[]を取り除いていない.
三、includes()の使用
includes()メソッドを使用して、配列に特定の要素が含まれているかどうかを判断し、含まれている場合はtrueが含まれていない場合はfalseを返します.
function unique(arr) {
let res = []
for (let i = 0; i < arr.length; i++) {
if (!res.includes(arr[i])) {
res.push(arr[i])
}
}
return res
}
console.log(unique(arr)) //[ 1, 'true', 'a', true, false, undefined, null, NaN, NaN, 'NaN', 0, {}, {}, [], []]
四、filter()の使用
filter()メソッドは、指定した配列の条件に合致するすべての要素をチェックする新しい配列を作成します.またfilter()は配列を変更したり、空の配列を検出したりしません.filter()メソッドはコールバック関数を受信します.
array.filter(function(item,index,arr)、this Value)itemは必須です.現在の要素の値indexはオプションです.現在の要素のインデックス値arrはオプションです.現在の要素が属する配列オブジェクト
function unique(arr) {
return arr.filter((item,index, arr) => {
return arr.indexOf(item) === index
})
}
console.log(unique(arr)) //[ 1, 'true', 'a', true, false, undefined, null, 'NaN', 0, {}, {}, [], [] ]
五、setを使う
function unique(arr) {
return [...new Set(arr)]
}
console.log(unique(arr)) //[ 1, 'true', 'a', true, false, undefined, null, NaN, 'NaN', 0, {}, {}, [], [] ]