2017-10-05 15 views
0

私はここにデータのコレクションを持っています。 私がしたいのはindexそのelementの配列に一意の値を持つことです。配列の集合に重複のない要素のインデックスを見つける

var setArray = [ false, true, false, false ] 
// Sample result will be 1, the index of unique value in array is true 
// and has a index of 1 
// code here to get the index... 

どうすれば解決できますか?

+0

しか真か偽であることを行っ値はありますか? – CBroe

+1

さらにいくつかのユースケースを試してみてください。 –

+0

こんにちはジョン、私の答えを確認してください、あなたが探しているものと正確に一致するはずです。 :) –

答えて

1
var setArray = [ false, true, false, false ] 

function singles(array) { 
     for(var index = 0, single = []; index < array.length; index++) { 
      if(array.indexOf(array[index], array.indexOf(array[index]) + 1) == -1) single.push(index);  
     }; 
     return single; 
    }; 

singles(setArray); //This will return 1 

Aわずかに変更された機能をthis質問に、あなたのニーズに合うように。配列を渡すだけで、ユニークな要素のインデックス値が返されます!それは簡単です。それがどうなるか教えてください。

+0

あなたはそれを行ったBro、ありがとう。 –

+1

@ JohnReyM.Baylen喜んでお手伝いします! –

1

次のアルゴリズムを試したことがありますか?アレイ内のすべてのアイテムについて、 は最初の発生のインデックスと次の発生のインデックスを見つけます。次の出現のインデックスが-1である場合、それは一意である。

var setArray = [ false, true, false, false ]; 
var unique = []; 

setArray.forEach(item => { 
    let firstIndex = setArray.indexOf(item, 0); 
    let secondIndex = setArray.indexOf(item, firstIndex + 1); 
    if(secondIndex < 0) { 
    unique.push(firstIndex); 
    } 
}); 

は、例えば、以下のフィドルを参照してください:ThinkingStiffによって
https://jsfiddle.net/yt24ocbs/

0

このコードは配列内のすべての一意の要素のインデックスの配列を返します。文字列、数値、ブール値のさまざまな型を受け入れます。

"use strict"; 
 

 
let strings = ["date1", "date", false, "name", "sa", "sa", "date1", 5, "8-()"]; 
 
let result = []; 
 

 
let data = strings.reduce((acc, el) => { 
 
    acc[el] = (acc[el] || 0) + 1; 
 
    return acc; 
 
}, {}); 
 

 
let keys = Object.keys(data); 
 

 
for (let i = 0, max = keys.length; i < max; i++) { 
 
    if (data[keys[i]] === 1) { 
 
     let index = strings.indexOf(keys[i]); 
 

 
     if (index === -1) { 
 
      index = strings.indexOf(+keys[i]); 
 
     } 
 

 
     if (index === -1) { 
 
      index = strings.indexOf(keys[i] === true); 
 
     } 
 

 
     result.push(index); 
 
    } 
 
} 
 

 
result.sort((a, b) => {return a - b}); 
 

 
console.log(result);

0

あなたは一意の値のインデックスをマッピングしてからちょうどインデックスをフィルタリングすることができます。

var array = [false, true, false, false], 
 
    result = array 
 
     .map(function (a, i, aa) { return aa.indexOf(a) === aa.lastIndexOf(a) ? i : -1; }) 
 
     .filter(function (a) { return ~a; }); 
 

 
console.log(result[0]);

ES6

var array = [false, true, false, false], 
 
    result = array 
 
     .map((a, i, aa) => aa.indexOf(a) === aa.lastIndexOf(a) ? i : -1) 
 
     .filter(a => ~a); 
 

 
console.log(result[0]);

関連する問題