2017-08-16 106 views
3

的重複的indexOf我正在尋找以下JS:創建包含在陣列

我要檢查的數組,重複一個js/jQuery的解決方案的陣列,可以說:

var destRes = ['BH17 7EP', 'TA2 6LL', 'OX15 4LJ', 'OX15 4LJ', 'OX15 4LJ', 'BH17 7EP', 'TA2 6LL'] 

並返回一個包含該值的第一個索引的數組; 例如用於上述前這應該是返回:

var newArr = ['0', '1', '2', '2', '2', '0', '1' ] 

BH17 7EP是在索引05,因此新陣列中的05索引應該0,的BH17 7EP

第一個實例

TA2 6LL在索引16因此在新陣列中16索引應該是1,第一個實例TA2 6LL

回答

6

您可以迭代數組並使用indexOf()它始終返回數組中值的第一個索引。是這樣的:

var destRes = ['BH17 7EP', 'TA2 6LL', 'OX15 4LJ', 'OX15 4LJ', 'OX15 4LJ', 'BH17 7EP', 'TA2 6LL']; 
 

 
var indexes = destRes.map(x => destRes.indexOf(x)); 
 

 
console.log(indexes);

+0

愛它;奇蹟般有效;正是我所看到的。乾杯 – florinescu

0

你可以利用哈希表的索引地圖,無需使用其他環路Array#indexOf

var array = ['BH17 7EP', 'TA2 6LL', 'OX15 4LJ', 'OX15 4LJ', 'OX15 4LJ', 'BH17 7EP', 'TA2 6LL'], 
 
    temp = Object.create(null), 
 
    result = array.map(function (a, i) { 
 
     return a in temp ? temp[a] : temp[a] = i; 
 
    }); 
 
    
 
console.log(result); 
 
console.log(temp);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

'in'運算符在後臺執行循環嗎? –

+0

是的,但不是隱含的。哈希表執行比在元素上搜索更好。 –

0

試試這個

var destRes = ['BH17 7EP', 'TA2 6LL', 'OX15 4LJ', 'OX15 4LJ', 'OX15 4LJ', 'BH17 7EP', 'TA2 6LL']; 
 
var newArr = []; 
 
for (var i = (destRes.length - 1); i >= 0; i--) { 
 
    var temp = 0; 
 
    for (var j = 0; j < i; j++) { 
 
    if (destRes[j] == destRes[i]) { 
 
     temp = 1; 
 
     break; 
 
    } 
 
    } 
 
    if (temp == 1) { 
 
    newArr[i] = j; 
 
    } else { 
 
    newArr[i] = i; 
 
    } 
 
} 
 
console.log(newArr);

+0

您可以用'indexOf'調用替換第二個'for-loop' –