【问题标题】:Find empty keys in array of object using javascript (Es6,typescript)使用javascript(Es6,typescript)在对象数组中查找空键
【发布时间】:2020-06-13 04:54:09
【问题描述】:

我有一个对象数组。在该对象数组中,我必须找到哪些键具有数组索引的空值。数组列表如下:

let fruits=[
   {name:"apple",quantity:2,price:"" },
   {name:"orange",quantity:" ",price:"2"},
   {name:"banana",quantity:" ",price:""}
];

所以在这里我必须找到任何具有空值的对象键,它应该返回带有索引的键。我尝试过使用.findIndex() 和其他方法,但不幸的是我不能。我是 es6 和打字稿的新手。我需要检查对象数组中具有空值的键。

【问题讨论】:

  • 请包含尝试过的代码,以及预期的输出。
  • quantity:" " 是否被视为空值?

标签: javascript arrays typescript object ecmascript-6


【解决方案1】:

请尝试以下示例

let fruits = [
  { name: "apple", quantity: 2, price: "" },
  { name: "orange", quantity: "", price: "2" },
  { name: "banana", quantity: "", price: "" },
];

const output = fruits.reduce((previousValue, currentValue, currentIndex) => {
  const keys = Object.keys(currentValue).filter((key) => !currentValue[key]);

  if (keys.length) {
    previousValue[currentIndex] = keys;
  }

  return previousValue;
}, {});

console.log(output);

【讨论】:

    【解决方案2】:

    这应该做你想做的事。它将通过您的数组“映射”,并为每个对象查找为空或空白字符串的属性键。然后将如此过滤的项目再次“映射”,所有找到的键与对象的“id”一起“加入”到逗号分隔的列表(属性“f”)中。作为最后一步,我过滤掉所有那些“f”属性实际上包含键名的对象。

    let fruits=[
    {name:"apple",quantity:2,price:"" },
       {name:"orange",quantity:" ",price:"2"},
    
    {name:"pineapple",quantity:3,price:5},
       {name:"banana",quantity:" ",price:""}
       ];
    
    let empty=fruits.map(f=>
      Object.keys(f).filter(k=>!(""+f[k]).trim()))
    .map((f,i)=>({id:i,f:f.join(',')}))
    .filter(f=>f.f)
    
    console.log(empty)

    在我的示例中,我添加了另一种具有完整填充属性的水果(“菠萝”)。我的 sn-p 将仅包含空格的字符串视为“空”。

    【讨论】:

      【解决方案3】:

      假设您要获取没有 price 值的水果,您需要运行过滤器,因为您的水果是一个数组。

      let emptyPriceFruits = fruits.filter((fruit) => !fruit.price)
      

      更多阅读 .filter - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

      【讨论】:

        【解决方案4】:

        这个怎么样,通过对象的entries 然后使用filter 来识别重复值:

        var fruits=[ {name:"apple",quantity:2,price:"", pal:null }, {name:"orange",quantity:" ",price:"2"}, {name:"banana",quantity:" ",price:""}];
        
        var emptyResult = fruits.map(k=>Object.fromEntries(Object.entries(k).filter(([k,v])=>typeof v=='string' && !v.trim())));
        
        console.log(emptyResult);

        【讨论】:

          猜你喜欢
          • 2019-03-21
          • 1970-01-01
          • 2020-09-15
          • 2018-11-12
          • 2018-03-01
          • 2021-10-04
          • 2022-08-03
          • 2023-01-12
          • 2018-03-04
          相关资源
          最近更新 更多