如何筛选具有相同名称但值不同的项的数组?

时间:2016-11-20 15:48:14

标签: javascript jquery arrays

我有一个包含项目的数组。

我通过使用此函数收集表单数据来创建此数组:

view userName vals

当我在表单中有一个复选框并且检查时,我在数组中得到两个项目,其中一个具有值

  

而另一个

  

我正在使用jquery过滤器功能来过滤数组,但我无法弄清楚如何丢弃具有该值的项目

  

数组的不受欢迎的结果:

enter image description here

我的尝试:

    getFormdata : function(form) {
        var formdata = $(form)
            .serializeArray()
            .filter(function (item) {
                return item.name != "__RequestVerificationToken"
            });

        return formdata;
    }

但这会过滤掉所有元素,而不仅仅是我想删除的元素。

我该怎么做?

编辑:

如果有两个名称相同的项目,则只应删除项目nr 2。 如果我只有一个名为" IsActive"然后不应该删除nr 2

2 个答案:

答案 0 :(得分:1)

如果有两个" IsActive"存在,删除虚假的。否则,不管它。 添加了验证令牌的删除。 移动检查值!=" false"在第二个滤波器之前可能使条件和增益性能短路。



var test = [
  { name: "__RequestVerificationToken", value: "whatever" },
  { name: "IsActive", value: "true" },
  { name: "updateRate", value: "sss" },
  { name: "IsActive", value: "false" },
  { name: "somethingElse", value: "weee" }
];

console.log(test.filter(function(element, index, array){
  return  element.name != "__RequestVerificationToken" && (
            element.value != "false"
            || array.filter(function(element2){
              return element2.name == element.name
            }).length < 2
          );
}));

var test = [
  { name: "__RequestVerificationToken", value: "whatever" },
  { name: "updateRate", value: "sss" },
  { name: "IsActive", value: "false" },
  { name: "somethingElse", value: "weee" }
];

console.log(test.filter(function(element, index, array){
  return  element.name != "__RequestVerificationToken" && (
            element.value != "false"
            || array.filter(function(element2){
              return element2.name == element.name
            }).length < 2
          );
}));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以先检查是否存在活动项目,然后将其用作以后检查过滤。

function filter(array) {
    var isActive = array.some(function (item) {
            return item.name === "IsActive" && item.value === "true";
        });
    return array.filter(function (item) {
        return (
            item.name !== "__RequestVerificationToken" && item.name !== "IsActive" ||
            item.name === "IsActive" && (item.value === "true" || !isActive)
        );
    });
}

var data0 = [{ name: 'IsActive', value: 'true' }, { name: 'IsActive', value: 'false' }, { name: 'Name', value: 'sss' }, { name: 'UpdateRate', value: '121212' }, { name: '__RequestVerificationToken', value: 'true' }, { name: '__RequestVerificationToken', value: 'false' }],
    data1 = [{ name: 'IsActive', value: 'false' }, { name: 'Name', value: 'sss' }, { name: 'UpdateRate', value: '121212' }, { name: '__RequestVerificationToken', value: 'true' }, { name: '__RequestVerificationToken', value: 'false' }];

console.log(filter(data0));
console.log(filter(data1));
.as-console-wrapper { max-height: 100% !important; top: 0; }