我想检查一个对象是否有一个值除了pageSize & pageStart & page
,这些值并不总是在那里,例如有时pagestart将丢失,如果它等于0。因此,检查对象的长度是不可靠的。
let object = {pageStart: 50,第2页:用户名:"Bobby"}
我想检查对象是否包含除了这些值之外的任何内容,并返回true/false。
一个简洁的选择是解构这些属性,使用rest语法将其余属性放入它们自己的对象中,然后查看该对象是否包含任何属性。
const { pageSize, pageStart, page, ...rest } = object;
return Object.keys(rest).length >= 1;
您可以使用some()
测试,如果任何Object.keys
不包含在预期键的数组中。这里使用Set.has()
进行有效的重复轮询。some()
将在第一场比赛中短路。
const hasUnexpectedKeys = (obj, expected) => {
const expectedSet = new Set(expected);
return Object.keys(obj).some(k => !expectedSet.has(k));
}
const expected = ['pageSize', 'pageStart', 'page'];
console.log(
hasUnexpectedKeys({ pageStart: 50, page: 2, userName: "Bobby" }, expected)
); // true
console.log(
hasUnexpectedKeys({ pageSize: 4, pageStart: 50, page: 2 }, expected)
); // false
或者只使用Array.includes()
const
expected = ['pageSize', 'pageStart', 'page'],
object = { pageStart: 50, page: 2, userName: "Bobby" };
console.log(
Object.keys(object).some(k => !expected.includes(k))
);
迭代对象的所有键(或某些键),如果发现某些键不在白名单中,则升起标记。
var allowed = "pageStart,page,userName".split(",")
var obj1 = {
page: 2,
pageStart: 2,
hello: 'world'
}
var obj2 = {
page: 2,
pageStart: 2
}
function find_alien(obj) {
for (var key in obj) {
if (allowed.indexOf(key) === -1) {
return key;
}
}
return false;
}
console.log(find_alien(obj1))
console.log(find_alien(obj2))