繁体   English   中英

如果名称和值对js中的值为空,则从Array中删除Object

[英]Remove Object From Array if the value is empty in name and value pair js

[{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"}

两个对象有什么区别?

您可以使用Array.prototype.filter和返回基于与否的一个布尔项value存在,因为空字符串是falsy。

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); 

注意 :如果您的任何value属性也是假的,它们也不会被拾取。 为了解决这个问题,您可以使用以下方法重写它: (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); 

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

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 

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

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

  return result;
}, []);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM