javascript - 如何在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]);
}
}
});
解决方案
这不是括号符号的工作方式。改变
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);
}
})
推荐阅读
- node.js - discord.js - 排行榜/顶部命令显示错误的顺序
- python - Series 和 Numpy 的性能比较
- javafx - 在单个 Add+Remove 事件中更改 JavaFX 节点的父节点,而不是两个单独的事件
- javascript - 使用 JavaScript,如何将 HTML 字符串转换为 HTML 标签和文本内容数组?
- java - Firebase中UID的比较在FirebaseRecyclerAdaper内部不一致
- laravel - 调用方法时测试 Laravel 存储库模式数据库刷新
- flutter - Flutter中结合GestureDetector和Listener时如何避免重复事件
- c# - 实体框架中的 Update-Database 与 context.Database.Migrate()
- python - 我什么时候应该使用 .copy()
- c++ - 如何从 C++17 以外的目录中读取 txt 文件(未知名称)?