javascript对不同数组

时间:2016-06-09 13:40:05

标签: javascript arrays sorting

我想将产品信息存储在键值数组中,其中键是唯一的产品网址。然后我还想存储每个产品的访问频率。我将这些对象存储为window.localStorage项目,但这不是很重要。

我想到的是两个关键值数组:

//product information
prods["url"] = ["name:product_x,type:category_x,price:50"]
//product visits frequency
freq["url"] = [6]

然后我想根据频率对这些产品进行排序。

这可能吗?

希望你们能帮忙!非常感谢

2 个答案:

答案 0 :(得分:0)

可能是这样的:

var prods = [
    {url:1, val:[{name:'a',type:'x',price:60}]}, 
    {url:2, val:[{name:'b',type:'x',price:30}]},
    {url:3, val:[{name:'c',type:'x',price:50}]},
    {url:4, val:[{name:'c',type:'x',price:20}]},
    {url:5, val:[{name:'c',type:'x',price:10}]},
    {url:6, val:[{name:'c',type:'x',price:40}]}
];

var freq = [
    {url:1, freq:6},
    {url:2, freq:3},
    {url:3, freq:5},
    {url:4, freq:2},
    {url:5, freq:1},
    {url:6, freq:4}
];

prods.sort(function (a, b) {
  var aU = freq.filter(function(obj) {
    return obj.url === a.url;
  });

  var bU = freq.filter(function(obj) {
    return obj.url === b.url;
  });

  if (aU[0].freq > bU[0].freq) {
    return 1;
  }
  if (aU[0].freq < bU[0].freq) {
    return -1;
  }

  return 0;
});

答案 1 :(得分:0)

好吧,你似乎已经为你的数据格式/结构做了几个奇怪的选择。但是假设“prod”的格式超出了你的控制范围,你可以选择你的数据结构,这是一种方法。

而不是两个对象都使用url作为关键字并且每个都有一个值字段,我只创建了一个对象仍然在url上,但是每个对象的产品和频率信息都在一个字段中

对象没有任何固有的顺序,所以不是对表对象进行排序而是对键进行排序,你的“url”按升序排序。

为了表明它按照那种方式排序,我将其打印出来(不是采用相同的格式)。

对于降频,请将data[a].freq - data[b].freq更改为data[b].freq - data[a].freq

var data = {
  "url": {
    prod: "name:product_x,type:category_x,price:50",
    freq: 6
  },
  "url2": {
    prod: "name:product_y,type:category_y,price:25",
    freq: 3
  }
};

var sorted = Object.keys(data).sort((a, b) => data[a].freq - data[b].freq);

console.log(sorted.map(k => [data[k].freq, k, data[k].prod]));

格式化数据的方法不止一种,这会改变代码的形状。