2017-05-04 76 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并将名称附加到名称字段,否则将新电影添加到结果数组中,是否需要算法?