代码之家  ›  专栏  ›  技术社区  ›  maxd

删除以参数开头的对象的属性

  •  0
  • maxd  · 技术社区  · 6 年前

    我想要一些建议,返回使用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>

    感谢您的帮助/建议。

    5 回复  |  直到 6 年前
        1
  •  1
  •   CRice    6 年前

    你在找洛达斯 _.omitBy 方法可以为第二个参数传递回调,该参数决定要忽略哪些属性。回调将使用两个参数调用, value key

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

    示例:

    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'))
    <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
        2
  •  0
  •   K.Wu    6 年前

    你不需要 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 }

        3
  •  0
  •   BalmySoftware    6 年前

    或者,可以获取对象关键帧,而不使用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;
    };
    
        4
  •  0
  •   hurricane    6 年前

        // 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'));
        5
  •  0
  •   Luca Kiebel    6 年前

    您可以使用一个简单的for来完成此操作。。循环中:

    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"));