首页 > 解决方案 > 如何在javascript中将字符串用作具有不同参数的对象?

问题描述

我有一个名为 test 的帖子数组,如果名称等于某个值,下一个代码将采用其他数组并推送帖子:

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]);
        }
     } 
});

标签: javascriptarrays

解决方案


这不是括号符号的工作方式。改变

if(item.["varNames[i]"] === 'mateo') {

到:

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);
    }
})

推荐阅读