【问题标题】:How can I loop over an array of objects without Object.keys()?如何在没有 Object.keys() 的情况下遍历对象数组?
【发布时间】:2021-11-01 06:24:05
【问题描述】:

我是 JavaScript 的初学者,我正在尝试解决这个问题没有 Object.keys() 或任何正则表达式。我有一个可行的解决方案,但我想知道是否有更好的方法可以在仍然循环的同时调用数组中的对象键。如果有人有办法做到这一点,这是基本的,请告诉我。

问题: 创建一个名为 keyCount 的函数,它接受两个参数、一个对象数组和一个字符串。该函数应返回一个数字,该数字是该键在对象数组中出现的次数。

预期结果: countTimesOfKey([{name:"Sharon"}, {name: "Manish"},{lastName: "Terma"}], "name")) // 2

我的回答:

function countTimesOfKey(arr, str) {
  let count = 0

  for (let i in arr){
    let test = arr[i]
    let test2 = test[str]

   if (test2 !== undefined){
      count += 1
    }
  }
  return count
}

【问题讨论】:

    标签: javascript arrays algorithm loops object


    【解决方案1】:

    您可以使用Array.filter 过滤出数组中具有str 作为属性的项目(通过使用Object.hasOwnProperty),然后返回结果数组的长度:

    function countTimesOfKey(arr, str) {
      return arr.filter(e => e.hasOwnProperty(str)).length;
    }
    
    console.log(countTimesOfKey([{
      name: "Sharon"
    }, {
      name: "Manish"
    }, {
      lastName: "Terma"
    }], "name"))

    【讨论】:

      【解决方案2】:

      当然,使用Object.keys()@Spectric 的解决方案比下面的解决方案要好得多,我只是想表明我们可以更加“简化”这一点。


      我们可以使用for...in

      • 循环遍历数组中的每个对象
      • 循环遍历当前索引上对象的每个键
        • 将每个键的名称与我们的检查变量进行比较
          • 增加我们的计数器
      • return结果计数器

      const result = countTimesOfKey([{name:"Sharon"}, {name: "Manish"},{lastName: "Terma"}], "name");
      console.log(result);
      
      function countTimesOfKey(arr, name) {
          let counter = 0;
          for (a in arr) {
              for (let k in arr[a]) {
                  if (k === name) {
                      counter++;
                  }
              }
          }
          return counter;
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 2022-11-14
        • 2014-03-20
        • 2011-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多