2015-07-03 2 views
1

Я реализовал функцию для получения мелкой копии массива без определенного элемента (используя его индекс).Получить массив без элемента по индексу

Но для этого я должен назвать три метода. Есть ли лучший способ сделать это?

const arrayWithoutElementAtIndex = function (arr, index) { 
    return arr.slice(0, index).concat(arr.slice(index + 1)) 
} 

arrayWithoutElementAtIndex([1, 2, 4, 8, 16, 32, 64], 3) // [1, 2, 4, 16, 32, 64] 

ответ

1

Как насчет обычного filter?

const arrayWithoutElementAtIndex = function (arr, index) { 
 
    return arr.filter(function(value, arrIndex) { 
 
    return index !== arrIndex; 
 
    }); 
 
} 
 
document.write(arrayWithoutElementAtIndex([1, 2, 4, 8, 16, 32, 64], 3)); // [1, 2, 4, 16, 32, 64]

Это будет означать, у вас есть только одна функция, и она возвращает новый экземпляр массива.

+0

Ах да! Фильтр ... Ду! Я желаю, чтобы es6 реализовала нежирное обозначение стрелки или, по крайней мере, предоставила ключевое слово 'fn'. Написание 'function' везде делает так, чтобы однострочный вкладыш мог быть помещен в 80 символов. – user1534422

+0

@ user1534422 с одной стрелкой, вы можете сделать это следующим образом: 'const arrayWithoutElementAtIndex = (arr, index, newArr = [... arr]) => (newArr.splice (index, 1), newArr)', вы можете см. мое издание ответов. Извините мой английский –

0

Вы можете сделать это в 2 операции с использованием splice(), но не будет смотреть, что хороший

'use strict' 
 

 
const arrayWithoutElementAtIndex = function(arr, index) { 
 
    var ret = arr.slice(); //make a copy 
 
    ret.splice(index, 1); //remove the item from given index 
 
    return ret; //return the copy 
 
} 
 

 
var array = [1, 2, 4, 8, 16, 32, 64]; 
 
var array2 = arrayWithoutElementAtIndex(array, 3) // [1, 2, 4, 16, 32, 64] 
 

 
snippet.log(array) 
 
snippet.log(array2)
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

Да, я пытался избежать сращивания, потому что вы всегда заканчиваете в три раза больше линий;) – user1534422

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