我想将 URL queries
与对象keys
和values
匹配。
网址: ?cost=10&name=item
const query = { cost: 10, name: 'item' }
const keys = ['cost', 'name']
const values = ['10', 'item']
如何检查keys[]
是否匹配Object.keys(query)
和values[]
匹配Object.values(query)
?我正在尝试在keys[]
和values[]
上使用for..in
和不同的.map(); .filter(); .indexOf() > -1
组合。
此外,10 == '10'
应该返回true
。
查看 Mozilla 开发者网络上的 Array.prototype.every(( 方法。以下函数满足以下匹配条件:
query
中的键数与keys
数组中的键数相同。query
中的值数与values
数组中的值数相同。keys
数组中的每个键也在query
中。query[key]
处的值等效于values
数组中相应索引处的值。
function matches(query, keys, values) {
const queryKeys = Object.keys(query);
const queryValues = Object.values(query);
return (
queryKeys.length === keys.length &&
queryValues.length === values.length &&
keys.every((key, index) => queryKeys.includes(key) && query[key] == values[index])
);
}
const query = {
cost: 10,
name: 'item'
};
const keys = ['cost', 'name'];
const values = ['10', 'item'];
console.log(matches(query, keys, values));
我希望这能回答你的问题。祝您编码愉快!
为了使给定的查询与给定的键和值相同,(1( 两者的长度必须相同,并且 (2( 每个查询参数必须包含在给定的键和值中:
// Compare query keys and values:
function identical(query, keys, values) {
return Object.keys(query).length == new Set(keys).size &&
keys.every((key, i) => query[key] == values[i]);
}
// Example:
const query = {cost: 10, name: 'item'};
const keys = ['cost', 'name'];
const values = ['10', 'item'];
console.log(identical(query, keys, values));
这样使用some
:
function match(query, keys, values) {
return ! keys.some(function(key, i) { // inverse the test
return query[key] != values[i];
});
}
const query = { cost: 10, name: 'item' };
const keys = ['cost', 'name'];
const values = ['10', 'item'];
console.log(match(query, keys, values));
或者使用如下所示的for
循环:
function match(query, keys, values) {
for(var i = 0; i < keys.length; i++)
if(query[keys[i]] != values[i]) return false; // if some key doesn't match return false
return true; // all keys matched return true
}
const query = { cost: 10, name: 'item' };
const keys = ['cost', 'name'];
const values = ['10', 'item'];
console.log(match(query, keys, values));
您可以先检查对象属性的长度是否与键数组相同,然后使用 every()
和 includes()
检查键和值。
const query = { cost: 10, name: 'item' }
const keys = ['cost', 'name']
const values = ['10', 'item']
var check = Object.keys(query).length == keys.length
&& Object.keys(query).every(function(key) {
return keys.includes(key) && values.includes(String(query[key]))
})
console.log(check)
遍历对象,使用 indexOf()
查看属性名称是否在 keys
中,值是否在 values
的相应元素中。
for (var k in query) {
var kindex = keys.indexOf(k);
if (kindex == -1 || values[kindex] != query[k]) {
console.log('Invalid key = ' + k + ' value = ' + query[k]);
}
}
或者你可以循环keys
:
keys.forEach(function(key, i) {
if (!(key in query && query[key] == values[i])) {
console.log('Missing key = ' + key + ' value = ' + values[i]);
}
});