如何将多个属性键作为参数传递给使用括号表示法的函数?

加拉沙

以下代码尝试计算value落在传递的key树下的情况myArr如果key仅将传递为一个属性,则尝试传递两个无效,则该方法有效。有一个简单的语法修复程序吗?

编辑:我正在尝试使用一个简单的for循环解决方案

let myArr = [
  {
    'level 1': {
      'level 2': 'val'
    }
  }
]

Array.prototype.count = function (key, value) {
  var count = 0;
  for (var i = 0; i < this.length; ++i) {
    if (this[i][key] == value) {
      count++;
    }
  }
  return count
}

var theCount = myArr.count(['level 1']['level 2'], 'val')
console.log(theCount)

一定的表现

传递count键数组和值:

const myArr = [{
  'level 1': {
    'level 2': 'val'
  }
}, {
  'prop 1': {
    'prop 2': 'val 2'
  }
}, {
  'prop 1': {
    'prop 2': 'val 2'
  }
}];

// lazy solution, if you need to possibly find a value of `false`,
// will have to write more elaborate code:
const keysToInnerVal = (inputObj, keys) => keys.reduce((obj, key) => {
  if (!obj) return false;
  return obj[key];
}, inputObj);
Array.prototype.count = function(keys, findValue) {
  return this.reduce((matchCountSoFar, item) => (
    matchCountSoFar + (keysToInnerVal(item, keys) === findValue)
  ), 0);
}

console.log(myArr.count(['level 1', 'level 2'], 'val'));
console.log(myArr.count(['prop 1', 'prop 2'], 'val 2'));

用同样的事情for循环,而不是keysToInnerVal功能的reduce

const myArr = [{
  'level 1': {
    'level 2': 'val'
  }
}, {
  'prop 1': {
    'prop 2': 'val 2'
  }
}, {
  'prop 1': {
    'prop 2': 'val 2'
  }
}];

const keysToInnerVal = (inputObj, keys) => keys.reduce((obj, key) => {
  if (!obj) return false;
  return obj[key];
}, inputObj);
Array.prototype.count = function(keys, findValue) {
  return this.reduce((matchCountSoFar, item) => {
    let ref = item;
    for (const key of keys) {
      if (ref === undefined) return matchCountSoFar;
      ref = ref[key];
    }
    return matchCountSoFar + (ref === findValue);
  }, 0);
}

console.log(myArr.count(['level 1', 'level 2'], 'val'));
console.log(myArr.count(['prop 1', 'prop 2'], 'val 2'));

完全没有reduce

const myArr = [{
  'level 1': {
    'level 2': 'val'
  }
}, {
  'prop 1': {
    'prop 2': 'val 2'
  }
}, {
  'prop 1': {
    'prop 2': 'val 2'
  }
}];

const keysToInnerVal = (inputObj, keys) => keys.reduce((obj, key) => {
  if (!obj) return false;
  return obj[key];
}, inputObj);
Array.prototype.count = function(keys, findValue) {
  let matchCount = 0;
  outer:
  for (const item of this) {
    let ref = item;
    for (const key of keys) {
      if (ref === undefined) continue outer;
      ref = ref[key];
    }
    matchCount += (ref === findValue);
  }
  return matchCount;
}

console.log(myArr.count(['level 1', 'level 2'], 'val'));
console.log(myArr.count(['prop 1', 'prop 2'], 'val 2'));

就像在评论中说的那样,像这样对内置对象进行突变Array是很糟糕的做法-不好的库做这种事情会使flatten 提案搁置一会儿。尽量避免使用它-例如,您可以使用一个独立的count函数来传递数组,键和要查找的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将类作为参数传递给PHP函数

如何将类类型作为参数传递给函数?

如何将struct作为参数传递给函数

如何将通道作为参数传递给函数?

如何将多个参数传递给apply函数

如何将参数作为函数传递给变量?

Laravel策略-如何将多个参数传递给函数

Python:如何将列表作为参数传递给函数?

我们如何将字节作为关键字参数的键传递给函数?

如何将多个函数重载作为单个参数传递?

是否可以以及如何将参数传递给聚合中使用的多个函数?

最佳实践:如何将多个参数传递给函数?

如何将参数传递给作为关键字参数传递的函数?

如何将函数作为属性传递给React组件?

如果传递的函数也将函数作为参数,如何将函数作为参数传递给C中的函数?

如何将多个列表值作为函数参数传递?

如何将多个对象属性作为参数传递?

如何将函数作为参数传递给transform()函数?

如何将对象的属性作为参数传递给函数

如何将函数作为参数传递给参数?

如何将属性作为参数传递给ActionScript中的函数

如何将元组作为参数传递给divmod()函数

如何将多个(未知数)对象(作为参数)传递给函数 - Java Script

如何将模板作为参数传递给函数

LINQ如何将多个选择作为函数参数传递

如何将参数中的属性传递给函数

如何将列表作为参数传递给函数

如何将 **kwargs 作为参数传递给 fastAPI 函数

如何将多个参数传递给 APL 函数