Проблема с вашим текущим решением заключается в том, что вы не используете .filter
правильно. .filter
ожидает, что переданная им функция вернет значение boolean
. Если возвращается true
, текущий элемент будет сохранен во вновь созданном массиве. Если это false
, текущий элемент будет опущен. Таким образом, вместо попытки удалить элемент из test_arr
с помощью .splice
, используйте .filter
, чтобы решить, что остается, а что удаляется.
Также обратите внимание, что в вашем примере v
ссылается на данный элемент (конкретный объект) в вашем test_array
. Таким образом, вам не нужно указывать индекс 0
вашего объекта, скорее вам нужно получить id
текущего объекта.
var test_arr = [{"name":"qqq", "city":"it","id":"123456"}, {"name":"ggg", "city":"uk","id":"777456"}];
test_arr = test_arr.filter(function(elem) {
return elem.id !== '123456';
});
console.log(test_arr); // [{"name": "ggg", "city": "uk", "id": "777456"}]
Если вы хотите «более чистое» решение, вы можете использовать функцию стрелки с разрушающим назначением :
test_arr = test_arr.filter(({id}) => id !== '123456'); // [{"name": "ggg", "city": "uk", "id": "777456"}]
var test_arr = [{"name":"qqq", "city":"it","id":"123456"}, {"name":"ggg", "city":"uk","id":"777456"}];
test_arr = test_arr.filter(({id}) => id !== '123456'); // [{"name": "ggg", "city": "uk", "id": "777456"}]
console.log(test_arr);
Можно использовать класс в качестве параметра скорее затем имя класса.
static <T extends Contract> T[] buildArray(Class<T> clazz){
ArrayList<T> l=new ArrayList<T>();
return l.toArray((T[]) java.lang.reflect.Array.newInstance(clazz, l.size()));
}
Править: (после того, как прочитанный комментарий Yang)
Нет, Вы не можете использовать универсальный тип со значением переменной.
Итак, почему бы не использовать
static <T> T[] buildArray(Class<T> clazz){
ArrayList<T> l=new ArrayList<T>();
return l.toArray((T[]) java.lang.reflect.Array.newInstance(clazz, l.size()));
}
Примечание. Измененный код сверху.