Javascript 检查字符串数组是否与obj键/属性匹配

Javascript 检查字符串数组是否与obj键/属性匹配,javascript,Javascript,我想将URL查询与对象键和值匹配 URL:?成本=10&名称=项目 如何检查键[]是否与Object.keysquery匹配,值[]是否与Object.valuesquery匹配?我正在尝试使用for..in和.map;的不同组合。滤器键[]和值[]上的indexOf>-1 另外,10='10'应该返回true。在对象上循环,使用indexOf查看属性名称是否在键中,值是否在值的对应元素中 或者,您可以在关键点上循环: 在对象上循环,使用indexOf查看属性名称是否在键中,值是否在值的对应元素

我想将URL查询与对象键和值匹配

URL:?成本=10&名称=项目

如何检查键[]是否与Object.keysquery匹配,值[]是否与Object.valuesquery匹配?我正在尝试使用for..in和.map;的不同组合。滤器键[]和值[]上的indexOf>-1


另外,10='10'应该返回true。

在对象上循环,使用indexOf查看属性名称是否在键中,值是否在值的对应元素中

或者,您可以在关键点上循环:


在对象上循环,使用indexOf查看属性名称是否在键中,值是否在值的对应元素中

或者,您可以在关键点上循环:


您可以首先检查对象属性的长度是否与“关键点”数组相同,然后使用“每个”和“包括”来检查关键点和值

const query={cost:10,name:'item'} 常量键=['cost','name'] 常量值=['10','item'] var check=Object.keysquery.length==keys.length &&Object.keysquery.everyfunctionkey{ 返回key.includeskey&&value.includestringquery[key] }
console.logcheck您可以首先检查对象属性的长度是否与keys数组相同,然后使用each和include检查键和值

const query={cost:10,name:'item'} 常量键=['cost','name'] 常量值=['10','item'] var check=Object.keysquery.length==keys.length &&Object.keysquery.everyfunctionkey{ 返回key.includeskey&&value.includestringquery[key] } console.logcheck使用类似的方法:

函数匹配查询、键、值{ return!keys.somefunctionkey,i{//反向测试 返回查询[key]!=值[i]; }; } const query={cost:10,name:'item'}; 常量键=['cost','name']; 常量值=['10','item']; console.logmatchquery、键、值 使用类似的方法:

函数匹配查询、键、值{ return!keys.somefunctionkey,i{//反向测试 返回查询[key]!=值[i]; }; } const query={cost:10,name:'item'}; 常量键=['cost','name']; 常量值=['10','item']; console.logmatchquery、键、值 在Mozilla开发者网络上查看该方法。以下功能满足以下匹配标准:

查询中的键数与键数组中的键数相同。 查询中的值数与值数组中的值数相同。 keys数组中的每个键也在查询中。 query[key]处的值与相应索引处的值数组中的值相等。 我希望这能回答你的问题。快乐编码

在Mozilla开发者网络上查看该方法。以下功能满足以下匹配标准:

查询中的键数与键数组中的键数相同。 查询中的值数与值数组中的值数相同。 keys数组中的每个键也在查询中。 query[key]处的值与相应索引处的值数组中的值相等。
我希望这能回答你的问题。快乐编码

为了使给定查询与给定键和值相同,1两者的长度必须相同,2每个查询参数必须包含在给定键和值中:

//比较查询键和值: 函数标识查询、键、值{ return Object.keysquery.length==new Setkeys.size&& keys.everykey,i=>query[key]==value[i]; } //例如: const query={cost:10,name:'item'}; 常量键=['cost','name']; 常量值=['10','item'];
console.logidentialquery、键、值 为了使给定查询与给定键和值相同,1两者的长度必须相同,2每个查询参数必须包含在给定键和值中:

//比较查询键和值: 函数标识查询、键、值{ return Object.keysquery.length==new Setkeys.size&& keys.everykey,i=>query[key]==value[i]; } //例如: const query={cost:10,name:'item'}; 常量键=['cost','name']; 常量值=['10','item'];
console.logidentialquery、键、值;您是否已经将原始查询拆分为查询对象?@leu m yep,对象有10个属性,url最多可以有10个查询,这取决于在上面的示例中应用了多少个过滤器,测试结果是真还是假?成本匹配与否10='10'?@ibrahimmahrir测试应为true,成本应匹配10='10'您可能需要澄清查询{a:1,b:2}是否应匹配键=['a'],值=['1']。您是否已将原始查询拆分为查询对象?@Leu m yep,对象有10个属性,url最多可以有10个查询,如果测试结果为真,则取决于上面示例中应用的过滤器数量

还是假的?成本匹配与否10='10'?@ibrahimmahrir测试应为true,成本应匹配10='10'您可能需要澄清查询{a:1,b:2}是否应匹配键=['a'],值=['1']或不匹配。Head-up:例如,查询={cost:10,名称:'item'},键=['cost','name'],值=['item','10']值被交换。对象中属性的顺序不受保证。Head-up:返回true,例如query={cost:10,name:'item'},key=['cost','name'],value=['item','10']值被交换。对象中属性的顺序不受保证。['10']。includes10==false与OP的最新注释相反,请参见上文。另外,返回true,例如query={cost:'10',name:'10'},key=['cost',name'],value=['10',20']谢谢@le_m。更新后的答案修复了您遇到的问题。['10']。includes10==false与OP的最新评论相反,请参见上文。此外,对于例如query={cost:'10',name:'10'},key=['cost',name'],value=['10',20']谢谢@le_m,返回true。更新后的答案修复了您遇到的问题。第一个答案返回true,例如query={cost:10,name:'item',more:'yes'},key=['cost','name'],value=['10','item']@le_m这两个答案都是!问题是什么?查询的参数比与之比较的键和值多。根据我的理解,这不应该匹配。OP可能想澄清一下。@le_m他没有明确说出他想要什么,根据我的理解:他想看看键是否与值数组中的值匹配。因此,matchquery,[],[]始终为真!第一个返回true,例如query={cost:10,name:'item',more:'yes'},key=['cost','name'],value=['10','item']@le_m这两个都是!问题是什么?查询的参数比与之比较的键和值多。根据我的理解,这不应该匹配。OP可能想澄清一下。@le_m他没有明确说出他想要什么,根据我的理解:他想看看键是否与值数组中的值匹配。因此,matchquery,[],[]始终为真!但是,当查询的参数少于键和值时,这不会检查。第二个会检查这一点。你是对的!可能要将其替换为“虽然:当查询的参数少于键和值时,这不会检查。第二个检查是这样的。您是对的!可能要将其替换为“尽管:
const query = { cost: 10, name: 'item' }
const keys = ['cost', 'name']
const values = ['10', 'item']
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.forEach(function(key, i) {
    if (!(key in query && query[key] == values[i])) {
        console.log('Missing key = ' + key + ' value = ' + values[i]);
    }
});
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));