代码之家  ›  专栏  ›  技术社区  ›  Waeez

如果名称和值对js中的值为空,则从数组中移除对象

  •  2
  • Waeez  · 技术社区  · 6 年前
    [{name: "mode", value: "1"},{name: "group", value: ""},{name: "from_date", value: ""},{name: "to_date", value: "2018-10-16"},{name: "action", value: "ac_filter_transactions"}
    

    这就是我的阵法。如果 value 是空的。

    我试过这个方法:但没用

    formData.map((i) => {
      (i.value == "") ? delete i: "";
    });
    

    let obj = {"firstname": "XYZ", "lastname": "ABC"}
    

    两个物体之间有什么区别?

    3 回复  |  直到 6 年前
        1
  •  12
  •   zfrisch    6 年前

    你可以用 Array.prototype.filter value 存在,因为空字符串是错误的。

    a.filter(o => (o.value));
    

    let a = [{name: "mode", value: "1"},{name: "group", value: ""},{name: "from_date", value: ""},{name: "to_date", value: "2018-10-16"},{name: "action", value: "ac_filter_transactions"}];
    
    
    let result = a.filter(o => (o.value));
    
    console.log(result);

    注意 (o.value !== "")

    let a = [{name: "mode", value: "1"},{name: "group", value: ""},{name: "from_date", value: ""},{name: "to_date", value: "2018-10-16"},{name: "action", value: "ac_filter_transactions"}];
    
    
    let result = a.filter(o => (o.value !== ""));
    
    console.log(result);
        2
  •  2
  •   lealceldeiro VonC    6 年前

    对于您的问题标题,我假设“remove”意味着改变数组(更改其实际内容)。如果是这样,你可以这样做:

    const copy = arr.slice(); // copy of array for iterating without getting the index (`i`) wrong
    let count = 0;
    copy.forEach((val, i) => { if (!val.value) arr.splice(i - count++, 1); });
                          // maybe `val.value != ""` instead of `!val.value` ?
    

    演示:

    var arr = [{name: "mode",value: "1"}, {name: "group", value: ""}, {name: "from_date",value: ""}, {name: "to_date", value: "2018-10-16"}, {name: "action",value:"ac_filter_transactions"}];
    
    const copy = arr.slice();
    let count = 0;
    copy.forEach((val, i) => { if (!val.value) arr.splice(i - count++, 1); });
    console.log(arr); // print original array, not a copy

    或者,如果您不想改变数组(不要更改它的实际内容),那么您可以这样做(过滤)它的副本:

    const copy = arr.filter(val => !!val.value)
    

    演示:

    var arr = [{name: "mode",value: "1"}, {name: "group", value: ""}, {name: "from_date",value: ""}, {name: "to_date", value: "2018-10-16"}, {name: "action",value:"ac_filter_transactions"}];
    
    console.log(arr.filter(val => !!val.value)); // print a copy, not the original array
        3
  •  0
  •   Stanislav Spuzyak    6 年前

    Array.map将在新数组中返回相同数量的项。因此,需要改用Array.reduce。

    formData.reduce((result, item) => {
      if (item.value) {
        result.push(item);
      }
    
      return result;
    }, []);