我正在尝试创建一个动态搜索,它根据用户对属性和搜索查询的选择返回数组中的匹配项。我的对象具有以下属性名称:
_id,
_name,
_engine,
_version,
_price,
_recalled
用户从下拉列表中选择按属性值搜索;
var PropertyName = "_" + $('#_options').find(":selected").text().toLowerCase();
我正在使用$ .grep函数来比较并尝试允许操作e [0]。[MyObjectPropety]。
我将如何根据用户偏好实现此目标?
var Items = $.grep(List, function (e)
{
return e[0].UsersDropDownSelection == 'UsersInput'
}
因此,如果用户在下拉列表中选择了“引擎”,则代码将执行如下操作:
var Items = $.grep(List, function (e)
{
return e[0]._engine == 'UsersInput'
}
我不确定如何在不使用键和元素进行迭代迭代每个项目的情况下进行比较。这需要是完全动态的,因此不能使用switch / case语句或嵌套if。
感谢您提前提供任何帮助,我希望这是有道理的!
答案 0 :(得分:0)
您可以使用数组表示法通过名称作为字符串访问对象属性。如果e[0]
是对象,则存在以下条件:
var elem = e[0];
var PropertyName = '_engine';
var hasEngine = elem.hasOwnProperty(PropertyName); // is true
然后elem[PropertyName]
应该等于e[0]._engine
。
我们可以通过一个简单的测试来断言:
var e = [ {_engine: 'im an engine'} ];
var elem = e[0];
var PropertyName = '_engine';
var hasEngine = elem.hasOwnProperty(PropertyName);
console.log(hasEngine); // prints true
console.log(elem[PropertyName]); // prints "im an engine"
因此,您的最终代码将是:
var Items = $.grep(List, function (e)
{
var elem = e[0];
if (elem.hasOwnProperty(UsersDropDownSelection) {
return elem[UsersDropDownSelection] == 'UsersInput';
} else {
return false; // should really do some exception here!
}
}