2016-05-02 3 views
0

У меня есть функция, как так:Функция петли один раз, а затем возвращается

removeDuplicates(item: String, allForToday: Array) { 
    let temp = allForToday; 
    for (let i = 0; i < temp.length; i++) { 
     if (temp[i].indexOf(item) > -1) { 
      temp = temp.splice(i, 1); 
     } 
    } 
    return temp; 
} 

который я называю так:

for (let i = 0; i < lastWeekItems.length; i++) { 
       allForToday = t.removeDuplicates(lastWeekItems[i], allForToday); 
} 

пропущенный lastweekItems[i] является строкой, и allForToday представляет собой массив строк это выглядит так: 1;2;3. lastweekItems [i] может быть, например, 2. Я ожидаю, что весь массив должен быть проверен для каждого элемента, и если элемент найден, запись, в которой он найден, удаляется из массива, но что я Видно, что проверяется только темп [0], а затем вся оставшаяся часть массива сплайсирована и возвращается пустым (temp.length поворачивается от 14 до 1) ...

+2

'1; 2; 3' Это не массив. –

+1

Есть ли причина, по которой вы пытаетесь объединить массив, с которым работаете, вместо использования 'filter' или что-то еще? – ssube

+0

Конечным результатом должен быть возвращенный массив без дубликатов, и я понятия не имею, как использовать фильтр –

ответ

0

Если вы просто хотите удалить дубликаты вы можете использовать редуктор следующим образом:

var arr = [1, 2, 3, 4, 5, 5, 4, 3, 2, 1]; 

var newArr = arr.reduce(function(acc, val) { 
    if(acc.indexOf(val) === -1) { 
    acc.push(val); 
    } 
    return acc; 
}, []); 

console.log(newArr); 

массив newArr будет содержать только без повторяющихся значений.

Смежные вопросы