Удалить элемент byattribute из массива Json, используя Jquery [duplicate]

Анализировать метод @static, буквально предоставляя разные идеи.

Обычный метод класса - это неявный динамический метод, который принимает экземпляр как первый аргумент. Наоборот, статический метод не принимает экземпляр в качестве первого аргумента, поэтому он называется «статическим».

Статический метод действительно является такой нормальной функцией, как те, которые находятся вне определения класса. Он, к счастью, сгруппирован в класс только для того, чтобы стоять ближе, где он применяется, или вы можете прокручивать его, чтобы найти его.

144
задан imperium2335 8 March 2013 в 08:14
поделиться

10 ответов

Одна возможность:

myArray = myArray.filter(function( obj ) {
    return obj.field !== 'money';
});

Обратите внимание, что filter создает новый массив. Любые другие переменные, относящиеся к исходному массиву, не будут получать отфильтрованные данные, хотя вы обновляете исходную переменную myArray с помощью новой ссылки. Используйте с осторожностью.

211
ответ дан Charlie H 28 August 2018 в 11:12
поделиться

На основании некоторых комментариев, приведенных ниже, приведен код, как удалить объект на основе имени ключа и значения ключа

 var items = [ 
  { "id": 3.1, "name": "test 3.1"}, 
  { "id": 22, "name": "test 3.1" }, 
  { "id": 23, "name": "changed test 23" } 
  ]

    function removeByKey(array, params){
      array.some(function(item, index) {
        return (array[index][params.key] === params.value) ? !!(array.splice(index, 1)) : false;
      });
      return array;
    }

    var removed = removeByKey(items, {
      key: 'id',
      value: 23
    });

    console.log(removed);
0
ответ дан JackTheKnife 28 August 2018 в 11:12
поделиться

var myArray = [
    {field: 'id', operator: 'eq', value: 'id'}, 
    {field: 'cStatus', operator: 'eq', value: 'cStatus'}, 
    {field: 'money', operator: 'eq', value: 'money'}
];
var newArray = _.remove(myArray, function(n) {
  return n.value === 'money';;
});
console.log('Array');
console.log(myArray);
console.log('New Array');
console.log(newArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>

1
ответ дан Parth Raval 28 August 2018 в 11:12
поделиться

Предположим, вы хотите удалить второй объект по свойству поля.

С ES6 это так же просто.

myArray.splice(myArray.findIndex(item => item.field === "cStatus"), 1)
7
ответ дан Peracek 28 August 2018 в 11:12
поделиться

Решение jAndy, вероятно, лучше всего, но если вы не можете полагаться на фильтр, вы можете сделать что-то вроде:

var myArray = [
    {field: 'id', operator: 'eq', value: 'id'}, 
    {field: 'cStatus', operator: 'eq', value: 'cStatus'}, 
    {field: 'money', operator: 'eq', value: "money"}
];

myArray.remove_key = function(key){
    var i = 0, 
        keyval = null;
    for( ; i < this.length; i++){
        if(this[i].field == key){
            keyval = this.splice(i, 1);
            break;
        }
    }
    return keyval;
}
1
ответ дан Rob M. 28 August 2018 в 11:12
поделиться
var myArray = [
    {field: 'id', operator: 'eq', value: id}, 
    {field: 'cStatus', operator: 'eq', value: cStatus}, 
    {field: 'money', operator: 'eq', value: money}
];
console.log(myArray.length); //3
myArray = $.grep(myArray, function(element, index){return element.field == "money"}, true);
console.log(myArray.length); //2

Элемент - это объект в массиве. Третий параметр true означает, что будет возвращен массив элементов, который не выполняет вашу логику функции, false означает, что будет возвращен массив элементов, который не выполняет вашу функциональную логику.

2
ответ дан Sandeep sandy 28 August 2018 в 11:12
поделиться

Вот еще один вариант использования jQuery grep. Pass true в качестве третьего параметра, чтобы grep удалял элементы, соответствующие вашей функции.

users = $.grep(users, function(el, idx) {return el.field == "money"}, true)

Если вы уже используете jQuery, тогда не требуется прокладка, которая может быть полезна в отличие от использования Array.filter.

8
ответ дан sifriday 28 August 2018 в 11:12
поделиться

Вы можете использовать lodash's findIndex , чтобы получить индекс конкретного элемента, а затем сплайсировать его.

myArray.splice(_.findIndex(myArray, function(item) {
    return item.value === 'money';
}), 1);

Обновить

Вы также можете использовать ES6's findIndex ()

Метод findIndex () возвращает индекс первого элемента в массиве, который удовлетворяет предоставленной функции тестирования. В противном случае возвращается -1.

myArray.splice(myArray.findIndex(myArray, function(item) {
    return item.value === 'money';
}), 1);
6
ответ дан Sridhar 28 August 2018 в 11:12
поделиться

Ниже приведен код, если вы не используете jQuery. Демо

var myArray = [
    {field: 'id', operator: 'eq', value: 'id'}, 
    {field: 'cStatus', operator: 'eq', value: 'cStatus'}, 
    {field: 'money', operator: 'eq', value: 'money'}
];

alert(myArray.length);

for(var i=0 ; i<myArray.length; i++)
{
    if(myArray[i].value=='money')
        myArray.splice(i);
}

alert(myArray.length);

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

Подчеркивание - это пояс библиотека для JavaScript, которая обеспечивает большую поддержку функционального программирования

4
ответ дан Umair Saleem 28 August 2018 в 11:12
поделиться

Итерации через массив, а splice - те, которые вы не хотите. Для более удобного использования повторите итерацию назад, чтобы вам не приходилось учитывать живую природу массива:

for (var i = myArray.length - 1; i >= 0; --i) {
    if (myArray[i].field == "money") {
        myArray.splice(i,1);
    }
}
61
ответ дан user1438038 28 August 2018 в 11:12
поделиться