【发布时间】:2019-07-06 23:55:00
【问题描述】:
我有一个看起来像这样的对象:
var myObj = {
"account id": "123TRANS",
"account name": "Optimus Prime",
"creator id": "Prime",
"contact tel": 08915243209,
"house no": 209,
"is registered": true,
"price": 398.83,
"first name": "paul",
"last name": "jones",
"dob": "27-Jun-1978 00:00:00",
"previous orders": true,
"average price": 123.78,
"lace colour": "blue",
"first line": "Jupiter Close",
"city": "New York",
"alias": "Jupiter",
"role": "Accountant"
}
在我的 HTML 页面上,我有一个 <input> 字段,用户可以在其中输入文本(至少需要 3 个字符)。我应该能够根据输入的字符串匹配上面的整个对象。
例如,如果 string = "Prime" 响应为:
{
"account name": "Optimus Prime",
"creator id": "Prime",
}
例如,string = "acc" 响应为:
{
"account id": "123TRANS",
"account name": "Optimus Prime",
"role": "Accountant"
}
例如,string = "209" 响应为:
{
"contact tel": 08915243209,
"house no": 209,
}
我尝试过使用.reduce,但是结果好坏参半:
var myObject = {from above};
var filter = 'prime';
myObject = Object.keys(myObject).reduce((r, e) => {
// Avoid int/float/bool and check key + value
if(e !== 'contact tel' &&
e !== 'house no' &&
e !== 'previous orders') {
// Check Key or Value for filter
if(myObject[e].toLowerCase().includes(filter.toLowerCase) || e.toLowerCase().includes(filter.toLowerCase())) {
r[e] = myObject[e]
}
}
// Check int/float/bool and check key
if(e === 'contact tel' ||
e === 'house no' ||
e === 'previous orders') {
// Check Key or Value for filter
if(e.toLowerCase().includes(filter.toLowerCase())) {
r[e] = myObject[e]
}
}
return r;
}, {})
我也可以访问 lodash 但是找不到任何检查键和值的东西,只有键或值。
【问题讨论】:
-
那些引号不正确——不是 JS 使用的引号——应该是
'和" -
我也很好奇——这里
[performance]的方面是什么? -
等等,这里的问题是什么?我开始阅读示例和代码,但是……没有任何问题。有一些数据,有一些示例响应,但是 - 这是要求吗?这就是现在生产的东西吗?怎么了?什么是正确的?这里需要什么?
标签: javascript performance lodash javascript-objects