根据jQuery中的其他数组动态过滤数组

时间:2019-07-03 14:38:44

标签: javascript jquery arrays

我无法解决这种情况,我需要根据另一个数组的键值过滤一个数组。这可能很容易,但是我无法捕获正确的键值对。

我有这一系列标记:

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)
  }
})

4 个答案:

答案 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 marksObject.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);