这不是副本。请看我下面的评论!
有没有人知道比ES6中循环更有效的解决方案?
我写了以下内容,性能欠佳。有什么改进的想法吗?非常感谢。
基本上,我有一个关于汽车的对象和一个关于用户偏好的数组。预期的行为是将所有相关的汽车名称放入一个数组中。
用户可以提供任意数量的首选项。只有在首选项中提到了所有规范时,才应该推送汽车名称。因此,一些偏好将是“剩余物”。
出于这个原因,在下面的示例中出现了本田,但不是宝马,这是预期的(但非常慢的行为)。
// Car objects
const cars = [{
    name: "Honda",
    category: "eco",
    specs: {
      0: "green",
      1: "fast",
      2: "automatic"
    }
  },
  {
    name: "BMW",
    category: "sport",
    specs: {
      0: "blue",
      1: "fast",
      2: "automatic"
    }
  }
]
// User preferences
const preferences = ["green", "fast", "4x4", "automatic", "panorama"]
// function to get length/amount of car specifications
function objsize(Myobj) {
  var osize = 0,
    key;
  for (key in Myobj) {
    if (Myobj.hasOwnProperty(key)) osize++;
  }
  return Object(osize);
};
//function to check if ALL specifications are included in the user preferences
function checkSpecs(spec_item) {
  return preferences.includes(spec_item)
}
// main function
function filter_func() {
  //final results
  let matched_cars = []
  for (i = 0; i < objsize(cars); i++) {
    let specs_collector = []
    for (j = 0; j < objsize(cars[i].specs); j++) {
      specs_collector.push(cars[i].specs[j])
    }
    if (specs_collector.every(checkSpecs) === true) {
      matched_cars.push(cars[i].name)
      specs_collector = []
    }
  }
  console.log(matched_cars)
}
filter_func()
https://stackoverflow.com/questions/52845297
复制相似问题