Анализировать метод @static, буквально предоставляя разные идеи.
Обычный метод класса - это неявный динамический метод, который принимает экземпляр как первый аргумент. Наоборот, статический метод не принимает экземпляр в качестве первого аргумента, поэтому он называется «статическим».
Статический метод действительно является такой нормальной функцией, как те, которые находятся вне определения класса. Он, к счастью, сгруппирован в класс только для того, чтобы стоять ближе, где он применяется, или вы можете прокручивать его, чтобы найти его.
Одна возможность:
myArray = myArray.filter(function( obj ) {
return obj.field !== 'money';
});
Обратите внимание, что filter
создает новый массив. Любые другие переменные, относящиеся к исходному массиву, не будут получать отфильтрованные данные, хотя вы обновляете исходную переменную myArray
с помощью новой ссылки. Используйте с осторожностью.
На основании некоторых комментариев, приведенных ниже, приведен код, как удалить объект на основе имени ключа и значения ключа
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);
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>
Предположим, вы хотите удалить второй объект по свойству поля.
С ES6 это так же просто.
myArray.splice(myArray.findIndex(item => item.field === "cStatus"), 1)
Решение 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;
}
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
означает, что будет возвращен массив элементов, который не выполняет вашу функциональную логику.
Вот еще один вариант использования jQuery grep. Pass true
в качестве третьего параметра, чтобы grep удалял элементы, соответствующие вашей функции.
users = $.grep(users, function(el, idx) {return el.field == "money"}, true)
Если вы уже используете jQuery, тогда не требуется прокладка, которая может быть полезна в отличие от использования Array.filter
.
Вы можете использовать lodash's findIndex , чтобы получить индекс конкретного элемента, а затем сплайсировать его.
myArray.splice(_.findIndex(myArray, function(item) {
return item.value === 'money';
}), 1);
Обновить
Вы также можете использовать ES6's findIndex ()
Метод findIndex () возвращает индекс первого элемента в массиве, который удовлетворяет предоставленной функции тестирования. В противном случае возвращается -1.
blockquote>myArray.splice(myArray.findIndex(myArray, function(item) { return item.value === 'money'; }), 1);
Ниже приведен код, если вы не используете 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, которая обеспечивает большую поддержку функционального программирования
Итерации через массив, а splice
- те, которые вы не хотите. Для более удобного использования повторите итерацию назад, чтобы вам не приходилось учитывать живую природу массива:
for (var i = myArray.length - 1; i >= 0; --i) {
if (myArray[i].field == "money") {
myArray.splice(i,1);
}
}