Кастинг к Классу, который определяется во времени выполнения

Проблема с вашим текущим решением заключается в том, что вы не используете .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);

5
задан Yang Meyer 19 December 2008 в 14:53
поделиться

2 ответа

Можно использовать класс в качестве параметра скорее затем имя класса.

   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)

Нет, Вы не можете использовать универсальный тип со значением переменной.

7
ответ дан 14 December 2019 в 04:49
поделиться

Итак, почему бы не использовать

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()));
}

Примечание. Измененный код сверху.

1
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: