2016-09-30 4 views
0

개체에 데이터를 저장해야하는 상황에 있지만 브라우저 제한으로 인해 해당 데이터의 수만큼만 설정할 수 있습니다. 내 응용 프로그램도이 데이터를 가져올 수 있어야하므로 속성의 키가 식별자 인 객체에 저장합니다.가장 오래된 날짜의 속성 가져 오기

데이터는 다음과 같습니다

memory = { 
    13: { 
     last_updated: 241, 
     ... 
    }, 
    26: { 
     last_updated: 363, 
     .... 
    } 
} 

last_updated은 물론 Date.now() 문자열이 될 것입니다. 이 개체는 6 개 이상의 속성을 가질 수 없습니다. 이 길이에 이르면 가장 오래된 속성을 새 데이터로 바꾸기 시작해야합니다. 객체의 가장 오래된 속성을 얻으려면 어떻게해야합니까?

+0

각 개체를보고 가장 오래된'last_updated '값을 가진 개체를 찾으려고 했습니까? FYI,'Date.now()'는 문자열이 아닌 숫자를 반환합니다. –

답변

2

한 가지 방법은 가장 오래된

var oldest = memory[Object.keys(memory).sort(function(a,b) { 
    return memory[b].last_updated - memory[a].last_updated 
}).pop()]; 
0

이는 memory 개체에서 최신 6 개 항목을 것입니다, 단지 마지막 업데이트 타임 스탬프에 의해 객체 키를 정렬 할 수 있으며, 마지막 하나의 팝업 것이다.

var freshMemory = Object.keys(memory) 
    .map(function (k) { return [k, data[k]] }) 
    .sort(function (a, b) { return b[1].last_updated - a[1].last_updated; }) 
    .slice(0, 6) 
    .reduce(function (o, v) { o[v[0]] = v[1]; return o; }, {}); 

간단한 설명

  1. 개의 튜플 (키와 값)
  2. 를 포함하는 배열에 객체를 전송할 것이다 .map 방법과 결합 Object.keys 다음 .sort는 정렬 할 last_updated을 역순으로 배열
  3. .slice은 처음 6 개 항목을 취합니다.
  4. 그리고 마지막으로 .reduce은 두 개의 튜플을 가진 배열을 다시 객체로 변환합니다.
0

당신은 같은 것을 할 수 있습니다 : 당신은이 작업을하기 위해 addNew(...) 기능을 사용하여 객체에 새 속성을 추가 할 필요가

var obj = {}; 
 
for(var i = 0;i < 5; i++){ 
 
    obj[i] = {date:Date.now() + i}; 
 
} 
 

 
function addNew(date){ 
 
    if(obj.length < 5){ 
 
     obj[obj.length] = {date:date}; 
 
     return; 
 
    } 
 
    var arr = []; 
 
    for(var prop in obj){ 
 
     arr.push({prop:prop,date:obj[prop].date}) 
 
    } 
 
    var last = arr.sort(function(a, b){return b.date-a.date})[0].prop; 
 
    obj[last].date = date; 
 
} 
 
addNew(Date.now() + 100); 
 
console.log(obj);

.

관련 문제