将lodash的pickby转换为javascript

时间:2019-02-18 09:24:20

标签: javascript lodash

如何在JavaScript中制作lodash的Pickby函数?我在“您不需要lodash”中找到了以下内容

function pickBy(object) {
    const obj = {};
    for (const key in object) {
        if (object[key] !== null && object[key] !== false && object[key] !== undefined) {
            obj[key] = object[key];
        }
    }
    return obj;
} 

但想知道其他实现方式

4 个答案:

答案 0 :(得分:1)

您可以添加谓词函数,如_.pickBy描述和使用条目并过滤数据并构建新对象。

function pickBy(object, predicate = v => v) {
    return Object.assign(
        ...Object
            .entries(object)
            .filter(([, v]) => predicate(v))
            .map(([k, v]) => ({ [k]: v }))
    );
}

答案 1 :(得分:1)

要创建How to Run Performance Tests on OAuth Secured Apps with JMeter,可以将_.pickBy()for...of一起使用。如果谓词返回值的真实答案,则将键和值分配给结果对象。

注意:如果您需要_.pickBy(),并且不想整个lodash包,则可以导入Object.entries()

function pickBy(object, predicate = v => v) {
  const obj = {};
  for (const [key, value] of Object.entries(object)) {
    if (predicate(value)) obj[key] = value;
  }
  return obj;
}

console.log(pickBy({ a: 1, b: 0, c: 3 }));
console.log(pickBy({ a: 1, b: 0, c: 3 }, v => v < 3 ));

现在,您可以获取条目,按值过滤并使用pickBy module转换回对象:

const pickBy = (object, predicate = v => v) =>
  Object.fromEntries(Object.entries(object).filter(([, v]) => predicate(v)))

console.log(pickBy({ a: 1, b: 0, c: 3 }));
console.log(pickBy({ a: 1, b: 0, c: 3 }, v => v < 3 ));

答案 2 :(得分:0)

存在

var object = { 'a': 1, 'b': '2', 'c': 3 };

并回调仅应用于对象(_.isNumber)值的方法:

Object.keys(obj).reduce((prev, x) => callback(obj[x]) ? { ...prev, [x] : obj[x] } : prev , {});

答案 3 :(得分:0)

当对象为import docx Traceback (most recent call last): File "<ipython-input-3-326e089686b3>", line 1, in <module> import docx File "C:\Users\T722696\AppData\Roaming\Python\Python37\site-packages\docx.py", line 30, in <module> from exceptions import PendingDeprecationWarning ModuleNotFoundError: No module named 'exceptions' 时,Nina的解决方案失败。 这是我的:

{}