https://lodash.com/docs/4.17.4#uniq
var arr = [0, 1, 2, 3, 3];
みたいな配列を、
var arr = [0, 1, 2, 3, 3]; _.uniq(arr); // => [0, 1, 2, 3]
としてくれます。(破壊的)
完。
しかし、自分、lodashのようなハイカラなライブラリを使ったことがなかったので、
pushするときにユニークかどうか調べていました。
function uniqValuePush(arr, index) { if (!Array.isArray(arr)) { return; } if (arr.indexOf(index) === -1) { arr.push(index); } }
こんな感じですね。
var arr = [0, 1, 2]; uniqValuePush(arr, 3); // => [0, 1, 2, 3] uniqValuePush(arr, 3); // => [0, 1, 2, 3] uniqValuePush(arr, 2); // => [0, 1, 2, 3] uniqValuePush(arr, 4); // => [0, 1, 2, 3, 4]
こんな感じでつかえます。
あと、用途はあるかわかりませんが、
配列にオブジェクトをpushする際に、特定のkeyがユニークかどうかチェックする関数もよく使っています。
function uniqObjKeyPush(arr, obj, key) { var bool = false, i; if (!Array.isArray(arr)) { return; } i = arr.length; while(i) { if (bool = bool || (arr[--i][key] === obj[key])) { i = 0; } } if (!bool) { arr.push(obj); } }
var arr = [{i: 0}]; uniqObjKeyPush(arr, {i: 1}, "index"); // => [{i : 0}, {i : 1}]; uniqObjKeyPush(arr, {i: 0}, "index"); // => [{i : 0}, {i : 1}]; uniqObjKeyPush(arr, {i: 1, j: 2}, "index"); // => [{i : 0}, {i : 1}]; uniqObjKeyPush(arr, {i: 2}, "index"); // => [{i : 0}, {i : 1}, {i : 2}];
と、こんな感じです。