2017-05-04 75 views
-1

我想用樣本數據操作數組。如何操作Javascript數組?

我試圖做的是發現在投票數據的movieId,指望它,獲取用戶名

數據說明:

movieId:票有多個movieIds,而只需要導入一個。

movieIdLength:movieId的總數。

name:具有相同movieId的用戶名。

例如:

var votes = [{ 

    "id": 1, 
    "pollId": 1, 
    "movieId": 2, 
    "name": "James" 
}, { 
    "id": 2, 
    "pollId": 1, 
    "movieId": 3, 
    "name": "Laura" 
}, { 
    "id": 3, 
    "pollId": 1, 
    "movieId": 1, 
    "name": "Dan" 
}, { 
    "id": 4, 
    "pollId": 1, 
    "movieId": 3, 
    "name": "Steve" 
}] 

我想要什麼:

var votesResult = [{ 

    "movieId": 2, 
    "movieIdLength": 1, 
    "name": "James" 
},{ 
    "movieId": 1, 
    "movieIdLength": 1, 
    "name": "Dan" 
},{ 
    "movieId": 3, 
    "movieIdLength": 2, 
    "name": "Laura, Steve" 
}] 
+4

這與REST有什麼關係? – Amy

+0

你想要在本地或從其他api過濾數據? –

+0

您需要從結果數組的空列表開始,然後循環數據並檢查電影ID是否在結果列表中。是,然後將movieIdCount加1並將名稱附加到名稱字段,否則將新電影添加到結果數組中,是否需要算法? – Benjaco

回答

0

ES6:

const a = [{ 
 
    "id": 1, 
 
    "pollId": 1, 
 
    "movieId": 2, 
 
    "name": "James" 
 
}, { 
 
    "id": 2, 
 
    "pollId": 1, 
 
    "movieId": 3, 
 
    "name": "Laura" 
 
}, { 
 
    "id": 3, 
 
    "pollId": 1, 
 
    "movieId": 1, 
 
    "name": "Dan" 
 
}, { 
 
    "id": 4, 
 
    "pollId": 1, 
 
    "movieId": 3, 
 
    "name": "Steve" 
 
}] 
 

 
const r = [...new Set(a.map(x => x.movieId))] 
 
\t .map(x => Object.assign({movieId: x}, 
 
    \t {movieIdLength: a.filter(l => l.movieId === x).length}, 
 
    \t {name: a.filter(q => q.movieId === x).map(n => n.name).join(', ')})); 
 

 
console.log(JSON.stringify(r, null, 2));

不太清楚,但沒有重複代碼:

const a = [{ 
 
    "id": 1, 
 
    "pollId": 1, 
 
    "movieId": 2, 
 
    "name": "James" 
 
}, { 
 
    "id": 2, 
 
    "pollId": 1, 
 
    "movieId": 3, 
 
    "name": "Laura" 
 
}, { 
 
    "id": 3, 
 
    "pollId": 1, 
 
    "movieId": 1, 
 
    "name": "Dan" 
 
}, { 
 
    "id": 4, 
 
    "pollId": 1, 
 
    "movieId": 3, 
 
    "name": "Steve" 
 
}] 
 

 
const r = [...new Set(a.map(x => x.movieId))] 
 
    .map(x => Object.assign({movieId: x}, 
 
    ((f) => Object.assign({movieIdLength: f.length, name: f.map(({name}) => name).join(', ')}) 
 
    )(a.filter(({movieId}) => movieId === x)) 
 
)); 
 

 
console.log(JSON.stringify(r, null, 2));

0

你需要開始與結果數組列表爲空,則遍歷所有的數據,並檢查影片ID是結果列表。是,然後將movieIdCount加1並將名稱附加到名稱字段,否則將新電影添加到結果數組中,是否需要算法?