2016-06-09 3 views
-1

고유 한 제품 URL을 키로 사용하여 키, 값 배열에 제품 정보를 저장하고 싶습니다. 그런 다음 각 제품의 방문 빈도를 저장하고 싶습니다. 이 객체들을 window.localStorage 아이템들로 저장 하겠지만, 그렇게 중요하지는 않습니다.자바 스크립트 정렬 키 값 다른 배열의 빈도 쌍

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

가 그럼 난 빈도에 따라이 PRODS를 정렬하고 싶습니다 :

내가 생각했던 것은

는 두 개의 키 값을 배열했다.

그럴 수 있습니까?

여러분이 도와 드리겠습니다. 덕분에이 같은

+2

원시 데이터를 약간 추가하십시오. –

+1

여러 키 - 값 배열의 이점은 무엇입니까? 왜 'url'을 자바 스크립트 * 객체 *에 매핑시키는 단일 키 - 값 배열을 사용하지 않을까요? 그런 다음 객체에 원하는대로 넣을 수 있습니다 (예 :'name'의 속성,'type'의 속성,'visit_frequency'의 속성 등) – mmcrae

답변

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

그럼 당신이 보인다는 데이터 형식/구조에 대한 몇 가지 이상한 선택을했다합니다. 그러나 "찌르다"의 형식이 귀하의 통제 범위를 넘어서는 것으로 가정하고 데이터 구조를 선택할 수 있습니다.

url을 키로 사용하고 하나의 값 필드를 사용하는 두 개의 오브젝트가 아니라 각각 하나의 오브젝트를 여전히 url에 키 조작했지만 각 필드의 제품 및 빈도 정보를 사용했습니다.

개체에는 고유 한 순서가 없으므로 키를 정렬하는 테이블 개체를 정렬하는 대신 오름차순으로 정렬 된 "url"키를 정렬합니다.

그런 식으로 정렬되어 있음을 보여주기 위해 동일한 형식이 아닌 다른 형식으로 출력합니다.

주파수 내림차순를 들어, 다음 코드의 모양을 변경할 것이다, 데이터의 형식을 하나 이상의 방법있다 data[a].freq - data[b].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]));

data[b].freq - data[a].freq로 변경합니다.