从参数开始删除对象的属性

时间:2018-05-03 20:32:22

标签: javascript lodash

我想要一些建议来返回使用lodash删除其他对象的对象的属性。 示例:

deletePropsThatStarsWith({a:1, b:2, aa:3}, 'a') //ouputs {b:2}

到目前为止,这是有效的,但我不知道我需要去哪里。



var obj = { a: 1, b: 2, aa: 3 }

function deletePropsThatStartsWith(object, prop) {
  return _.omit(object, prop)
}

console.log(deletePropsThatStartsWith(obj, 'a'))

<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
&#13;
&#13;
&#13;

感谢您的帮助/建议。

5 个答案:

答案 0 :(得分:1)

您正在寻找lodash _.omitBy方法。您可以为第二个参数传递回调,该参数决定省略哪些属性。将使用两个参数valuekey调用回调。

因此,对于您的示例,您只需检查密钥,并查看它是否以所需的字符串开头。 .startsWith方法将是一个不错的选择,或者如果您不能使用它,则lodash本身会提供_.startsWith方法。

示例:

&#13;
&#13;
var obj = {a: 1, b: 2, aa: 3}

function deletePropsThatStartsWith(object, prop) {
  return _.omitBy(object, (v, k) => k.startsWith(prop))
}

console.log(deletePropsThatStartsWith(obj, 'a'))
&#13;
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您不需要lodash,请尝试自己实施:

function deletePropsThatStartsWith(object, letter) {
    var newObjc = {}
    Object.keys(object).forEach((key) => {
        if (!key.startsWith(letter)) {
            newObjc = { ...newObjc, [key]: object[key] }
        }
    })

    return newObjc
}

const objc = { a: 1, b: 2, aa: 3 }
console.log(deletePropsThatStartsWith(objc, 'a'))

输出为{ b: 2 }

答案 2 :(得分:0)

或者,您可以获取对象键,而不是完全使用lodash。这是内置于vanilla js(我最喜欢的JS框架!)

function deletePropsThatStartsWith(oldObject, prop) {
  let newObject = {};
  Object.keys(oldObject).forEach(k => {
    if (k.startsWith(prop)) continue;
    newObject[k] = oldObject[k];
  });
  return newObject;
};

答案 3 :(得分:0)

    // without lodash
    function deletePropsThatStartsWith(obj, prop) {
      var keys = Object.keys(obj);
      var newObj = {};
      for(var i = 0;i < keys.length;i++){
        if(keys[i][0] !== prop){
          newObj[keys[i]] = obj[keys[i]]
        }
      }
      return newObj;
    }
    console.log(deletePropsThatStartsWith({a:1,b:2,aa:3},'a'));

答案 4 :(得分:0)

您可以使用简单的for..in循环执行此操作:

function deletePropsThatStartsWith(object, prop) {
  let copy = {};
  for (key in object) {
    if (!key.startsWith(prop)) 
      copy[key] = object[key]
  };
  return copy;
}

var obj = { a: 1, b: 2, aa: 3 }

console.log(deletePropsThatStartsWith(obj, "a"));