みかづきブログ その3

3ヶ月つづけてみました。

配列の重複した要素を削除して中身がユニークな配列をつくりたいぜ 😎

lodashuniq をつかえばOK!

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}];

と、こんな感じです。