添加删除过滤器数组Javascript

时间:2018-04-15 12:59:17

标签: javascript jquery arrays grep

1)我正在寻找内置的jquery函数,它们可以添加/删除/从数组中获取项目。 或者更好的方式来做我在下面做的同样的事情。虽然下面的代码有效,但我觉得应该有更好的方法。

我不擅长JavaScript,所以这段代码可能看起来很糟糕:)

var items = 
[
    {"Selected": false, "Text": "FirstElement", "Value": "1"},
    {"Selected": false, "Text": "SecondElement", "Value": "2"},
    {"Selected": false, "Text": "ThirdElement", "Value": "3"},
    {"Selected": false, "Text": "FourthElement", "Value": "4"}
]

function findItem(items, elementValue) {
    var item = {};

    if(elementValue == undefined || elementValue =="")
        return item;

    var i = $.map(items, function(n,i) { return i; }).length;

    while(i--){
        var temp = items[i].Value;
        if(elementValue == items[i].Value){
            item = {"Text": items[i].Text, "Value": items[i].Value};
        }
    }

    return item;
}

function removeItem(items, elementValue) {
    if(elementValue == undefined || elementValue =="")
        return items;

    var result = $.grep(items, function(e){
        return e.Value != elementValue;
    });

    return result;
}

function addItem(items, elementValue, elementText) {
    if(elementValue == undefined || elementValue =="")
        return items;

    var i = $.map(items, function(n,i) { return i; }).length;
    var x = i;

    var valueExists = false;

    while(i--){
        var temp = items[i].Value;
        if(elementValue == items[i].Value){
            valueExists = true;
        }
    }

    if(!valueExists){
        items[x] = {"Selected": false, "Value": elementValue, "Text": elementText};
    }

//I also need some sorting here on Value
    return items;
}

2)我正在使用

var tempItems = Object.assign({}, addItem(items, elementValue, elementText)) 

添加项目之后,我希望在不同的临时对象中引用,因为我必须使用主列表和筛选列表。有没有办法可以添加项目并获取返回项目的另一个实例。

可能是Object.assign是我在添加/删除/获取项目时遇到的根本原因。

欢迎并赞赏任何建议。谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用内置的javascript函数(不是jquery :):

// Finding an item
items.find(function(item) { return item.Value == '3'})

// Removing/filtering out an item (returns a new copy)
items.filter(function(item) { return item.Value !== '3'})

要返回addItem的新副本,您可以使用Object.assign({},...)复制addItems函数内的项目。

答案 1 :(得分:0)

您实际上可以使用适用于数组的本机过滤器方法。它会是这样的:



function findElement(items, elementValue) {
    	let result = items.filter(function(item) {
    		return item.Value === elementValue; 
    	})
    	console.log(result); //should output the desired result
    }