获取以下两个对象。
gui.display()
如何循环遍历this.rows并检查其中哪个对象键与filterForm的键匹配?我看过有关检查一个对象是否完全匹配另一个对象的文章,但是我只想循环遍历该对象以检查哪些键匹配。
随后,一旦我确定哪些键匹配,那么如何检查哪些值匹配?
答案 0 :(得分:2)
您可以使用Object.keys
来获取filterForm
密钥:
let availableKeys = Object.keys(filterForm);
然后,您需要循环this.rows
并找到上述数组中包含的所有键:
this.rows.forEach(row => {
let rowKeys = Object.keys(row);
let matchingRowKeys = availableKeys.filter(k => rowKeys.indexOf(k) > -1);
//If you then want to check if the values match
matchingRowKeys.forEach(rk => {
if (row[rk] === filterForm[rk]) {
//matching value
console.log("Found matching key/value", rk, row[rk]);
}
});
});
答案 1 :(得分:1)
这是如何找到匹配键的简单示例。这将执行以下操作:
filter_form
键。filter_keys
中存在的密钥。
var filter_form, rows, filter_keys, result;
filter_form = { 'claim_number': null, 'status': 'approved', 'patient': null, 'service_date': null };
rows = [
{ 'claim_number': '6632224-3', 'patient': 'Janine Soprano', 'allowed_amount': '$100', 'service': 'medical', 'status': 'approved', 'provider': 'Sam Smith' },
{ 'claim_number': '3218458-0', 'patient': 'Samatha Snow', 'allowed_amount': '$1100', 'service': 'medical', 'status': 'approved', 'provider': 'John Smith' }
];
filter_keys = new Set(Object.keys(filter_form));
result = rows.map(row => Object.keys(row).filter(key => filter_keys.has(key)));
console.log(result);
此答案使用 Set 实例快速查找键。如果您不想使用集,请替换以下部分。
filter_keys = new Set(Object.keys(filter_form))
// with
filter_keys = Object.keys(filter_form)
key => filter_keys.has(key)
// with
key => filter_keys.indexOf(key) !== -1
如果您对映射不感兴趣,但想使用当前迭代中的匹配键,请使用:
let filter_keys = new Set(Object.keys(filter_form));
rows.forEach(row => {
let matching_keys = Object.keys(row).filter(key => filter_keys.has(key));
// ...
});
答案 2 :(得分:0)
您可以使用flatMap,Array.filter()和新的Set对象来获取唯一键,同时还可以使代码简短易读。
filter
这里是一个带有示例的jsfiddle(打开控制台)。
注意:您也可以使用Set
代替const uniqueExistingKeys = existingKeys.filter((value, index) =>
existingKeys.indexOf(value) === index);
/* Sample data:
[{
"bhp": 354,
"model": "a45",
"make": "mercedes"
}, {
"model": "m4",
"make": "bmw"
}]
*/
xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.myjson.com/bins/1cjhoe');
xhr.onload = function() {
var cars = JSON.parse(xhr.responseText);
if (xhr.status === 200) {
populate(cars);
} else {
console.log('Request failed. Returned status of ' + xhr.status);
}
};
xhr.send();
function populate(cars) {
var list = document.getElementById('list');
cars.forEach(function(car) {
var carDiv = document.createElement('div');
carDiv.className = 'car';
if (car.make) { carDiv.innerHTML = '<div>' + car.make + ' </div>'; }
if (car.model) { carDiv.innerHTML += '<div>' + car.model + ' </div>'};
if (car.bhp) { carDiv.innerHTML += '<div>' + car.bhp + ' </div>'; }
list.appendChild(carDiv);
});
}
我选择Set是因为它更简洁。 这完全取决于您:)