如何在javascript中将字符串用作具有不同参数的对象?
我有一个post数组,它是call test,下一个代码使用另一个数组,如果名称等于某个值,则推送post:如何在javascript中将字符串用作具有不同参数的对象?,javascript,arrays,Javascript,Arrays,我有一个post数组,它是call test,下一个代码使用另一个数组,如果名称等于某个值,则推送post: var test = []; docs = [{name: 'mateo',lastName: 'mateo'}, {name: 'Jhon',lastName: 'smith'}}] docs.forEach(function(item) { if(item.name === 'mateo'){ test.push(item); } }
var test = [];
docs = [{name: 'mateo',lastName: 'mateo'},
{name: 'Jhon',lastName: 'smith'}}]
docs.forEach(function(item) {
if(item.name === 'mateo'){
test.push(item);
}
});
我想对名称使用不同的参数,但我不知道如何使用,我试图使用类似的方法,但没有成功:
var test = [];
docs = [{name: 'mateo', lastName: 'mateo'},
{name: 'Jhon',lastName: 'smith'}}]
const varNames = ['name','lastName'];
docs.forEach(function(item) {
for(i = 0; i < varNames.length; i++){
if(item.[varNames[i]] === 'mateo'){
test.push(item);
console.log(varNames[i]);
}
}
});
var测试=[];
docs=[{name:'mateo',lastName:'mateo'},
{name:'Jhon',lastName:'smith'}]
const varNames=['name','lastName'];
docs.forEach(功能(项目){
对于(i=0;i
括号符号不是这样工作的。改变
if(item.["varNames[i]"] === 'mateo') {
致:
顺便说一下,您应该在匹配项后中断循环:
if(item[varNames[i]] === 'mateo') {
test.push(item);
break;
}
您还可以将整个for
循环替换为另一个名为some
的数组函数,使整个代码看起来像:
docs.forEach(function(item) {
var check = varNames.some(function(varName) {
return item[varName] === 'mateo';
});
if(check) {
test.push(item);
}
})
如果使用箭头功能,则可以缩短:
docs.forEach(item => {
if(varNames.some(varName => item[varName] === 'mateo')) {
test.push(item);
}
})
诀窍是迭代
varNames
和docs
。您熟悉.forEach
,因此本例使用它,尽管这可能是.filter
的更好例子
const test=[];
const varNames=['name','otherName'];
常量文档=[
{name:'mateo'},
{name:'name'},
{name:'otherName'}
];
forEach(varName=>{
docs.forEach(doc=>{
if(doc.name==varName)test.push(doc);
});
});
控制台日志(测试)代码>您真的应该使用它,一切都会变得更简单:
let docs=[
{name:'mateo',lastName:'johnson'},
{name:'Jhon',lastName:'smith'},
{name:'Mark',lastName:'mateo'}
]
var test=docs.filter(item=>item.name==“mateo”)
console.log(test)
请更新您的帖子,以包含一个完整的可运行示例。将项。[“varNames[i]”]
替换为项[varNames[i]
如果我使用[varNames[i]],我在运行nodejs时会出现语法错误(我在[“…”时会出现错误)我也不知道该怎么做才是问题所在。@ManuelEsteban在调用forEach
之前是否已经有了test
中的元素?谢谢你的some()数组的方法是我问题的解决方案。@ManuelEsteban不客气!顺便说一句,for
循环的也很好,您只需更正括号符号的语法并添加break
语句。
docs.forEach(item => {
if(varNames.some(varName => item[varName] === 'mateo')) {
test.push(item);
}
})