【问题标题】:How to exclude empty values and keys in array with jquery?如何使用 jquery 排除数组中的空值和键?
【发布时间】:2019-05-14 02:12:13
【问题描述】:

我有一个数组;

[
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""}
]

所以,如果值为空,我想删除元素。如果用户添加了 2 个参考信息,我想得到这样的数据;

[
{pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
{pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
]

我使用了一些方法,但没有奏效。这是 reduce 的最后一次尝试,$prerefData 有这个数组;

var arr = $prerefData.reduce((result, item) => {
    if (item.value != "") {
       result.push(item);
    }
    return result;
    }, []);
console.log(arr);

【问题讨论】:

标签: javascript jquery arrays ajax object


【解决方案1】:

您可以使用Javascript Array filter method

简单地说,Array.filter 将遍历您的数组,并对每个元素运行回调:

  • 如果返回true:元素包含在result
  • 如果返回false:元素被过滤掉

let data = [
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
  {pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
];

let result = data.filter(function (item) {
  for(key in item) {
    if (item[key]) {
      // Means one of the object keys have values, include it in the result
      return true
    }
  }
})

console.log(result)

【讨论】:

  • 谢谢阿里,这正是我想要的。
  • @NoobDoez 很高兴我能帮上忙 :)
【解决方案2】:

试试

data.filter(x=> Object.values(x).join(''));

let data = [
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
  {pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
];

let r = data.filter(x=> Object.values(x).join(''));

console.log(r);

【讨论】:

    【解决方案3】:

    你应该使用过滤方法:

    let filtredArr = arr.filter(ele => ele.pre_ref_fullname && ele.pre_ref_position && ele.pre_ref_phone)
    

    由于空字符串返回 false,如果这是过滤数组中元素的唯一情况,则无需添加比较。

    【讨论】:

      【解决方案4】:

      filterObject.valuesevery 一起使用,并使用trim 确保它排除空格:

      const data = [{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"Name",pre_ref_position:"Job",pre_ref_phone:"Number"},{pre_ref_fullname:"Name2",pre_ref_position:"Job2",pre_ref_phone:"Number2"}];
      
      const res = data.filter(e => Object.values(e).every(s => s.trim != ""));
      
      console.log(res);
      .as-console-wrapper { max-height: 100% !important; top: auto; }

      【讨论】:

        【解决方案5】:

        您可以使用filter,使用Object.values提取单个对象的所有值。使用every检查所有数组值是否不是空字符串。

        let data = [{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"Name","pre_ref_position":"Job","pre_ref_phone":"Number"},{"pre_ref_fullname":"Name2","pre_ref_position":"Job2","pre_ref_phone":"Number2"}];
        
        let result = data.filter(o => Object.values(o).every(e => e.trim() !== ""));
        
        console.log(result);

        如果要检查至少一个不是空字符串,可以使用some

        let data = [{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"not Empty","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"Name","pre_ref_position":"Job","pre_ref_phone":"Number"},{"pre_ref_fullname":"Name2","pre_ref_position":"Job2","pre_ref_phone":"Number2"}]
        
        let result = data.filter(o => Object.values(o).some(e => e.trim() !== ""));
        
        console.log(result);

        【讨论】:

          猜你喜欢
          • 2012-09-26
          • 1970-01-01
          • 1970-01-01
          • 2021-08-16
          • 2020-03-27
          • 1970-01-01
          • 2016-04-11
          • 2021-04-10
          • 1970-01-01
          相关资源
          最近更新 更多