我无法解决这种情况,我需要根据另一个数组的键值过滤一个数组。这可能很容易,但是我无法捕获正确的键值对。
我有这一系列标记:
marks = {
eng : 90,
maths : 50,
phy : 60,
chem : 75,
bio : 85,
}
另一个具有相同键名的标签数组:
tags = {
eng : 'English',
maths : 'Maths',
phy : 'Physics',
chem : 'Chemistry',
bio : 'Biology',
}
如果标记是tags
数组中的>65
,现在我需要过滤marks
数组,并且预期结果是:
filteredTags = {
eng : 'English',
chem : 'Chemistry',
bio : 'Biology',
}
甚至更好:
filteredTags = ['English', 'Chemistry', 'Biology']
到目前为止,我已经尝试过:
filteredTags = []
$.each(marks, function(ind, val) {
if (val > 60){
filteredTags = tags.filter(function(i,v) {
return (i == ind)
}
})
答案 0 :(得分:2)
使用数组会更容易,但是此代码应该可以工作:
let marks = {
eng : 90,
maths : 50,
phy : 60,
chem : 75,
bio : 85,
}
let tags = {
eng : 'English',
maths : 'Maths',
phy : 'Physics',
chem : 'Chemistry',
bio : 'Biology',
}
function getTagsWithMarksAbove(num) {
let result = [];
for(prop in marks) { // Iterate over the properties of the marks object
if(marks[prop] > num) // Check if mark is above the specified number
result.push(tags[prop]); // Add value of tags property with the same name to result array
}
return result;
}
console.log(getTagsWithMarksAbove(65))
答案 1 :(得分:0)
您可以reduce marks
中Object.entries的数组:
const marks = {
eng: 90,
maths: 50,
phy: 60,
chem: 75,
bio: 85
};
const tags = {
eng: "English",
maths: "Maths",
phy: "Physics",
chem: "Chemistry",
bio: "Biology"
};
const result = Object.entries(marks).reduce((all, [tag, score]) => {
if (score > 65) all[tag] = tags[tag];
return all;
}, {});
console.log(result); // Object
console.log(Object.values(result)) // Array of values
答案 2 :(得分:0)
您可以获取条目并过滤键/值对并获取标签数组。
var marks = { eng: 90, maths: 50, phy: 60, chem: 75, bio: 85 },
tags = { eng: 'English', maths: 'Maths', phy: 'Physics', chem: 'Chemistry', bio: 'Biology' }
result = Object
.entries(marks)
.filter(([_, v]) => v > 65)
.map(([k]) => tags[k])
console.log(result);
答案 3 :(得分:0)
var marks = {
eng : 90,
maths : 50,
phy : 60,
chem : 75,
bio : 85,
}
var tags = {
eng : 'English',
maths : 'Maths',
phy : 'Physics',
chem : 'Chemistry',
bio : 'Biology',
}
var keysSorted = Object.keys(marks).sort(function(a,b){return marks[b]-marks[a]})
var finalResult = [];
for(var key in keysSorted)
finalResult.push(tags[keysSorted[key]]);
console.log(finalResult);