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



我想要一些建议来返回一个对象的属性,其中其他属性是使用 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>

感谢您的帮助/建议。

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

因此,对于您的示例,您所需要的只是检查键,并查看它是否以所需的字符串开头。.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>

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

或者,您可以获取对象键而根本不使用 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;
};

// 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'));

你可以用一个简单的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"));

最新更新