如果我有两个像
这样的数组a= [{ name: 'a', name: 'b' }]
b= [c, d, b, e]
我希望结果像
[
{ 'name': 'a' },
{ 'name': 'b' },
{ 'name': 'c' },
{ 'name': 'd' },
{ 'name': 'e' }
]
但是不想像使用_.map()
的第一个数组转换那样反复检查,并且在使用_.union()
或其他类型进行合并之后,请检查_.uniq()
通过但是如果可能的话我需要全部然后作为短层。
答案 0 :(得分:0)
要使用Backbone.Collection执行此操作,您可以利用model parse function以及在实例化时提供parse: true
选项。通过指定model idAttribute
,可以避免重复的模型。注意:我在这里使用lodash进行某些类型检查和数组合并。
var a = [{name: 'a'}, {name: 'b'}];
var b = ['c', 'd', 'b', 'e'];
var Coll = Backbone.Collection.extend({
model: Backbone.Model.extend({
idAttribute: 'name',
parse: function(resp, opts) {
var modelData = resp;
if (_.isString(resp)) {
modelData = { name: resp };
}
return modelData;
}
})
});
// then on initialize
var data = _.union(a, b);
var coll = new Coll(data, {parse: true});
console.log(JSON.stringify(coll.toJSON()));
// yields
"[{"name":"a"},{"name":"b"},{"name":"c"},{"name":"d"},{"name":"e"}]"
// alternatively, you can choose not merge the data to start
// and instead either pass some at initialize and then
// some with a coll.set later, or all with set
// Note: set call still needs parse:true as well as remove:false
var coll = new Coll(a, {parse: true});
coll.set(b, {parse: true, remove: false});
console.log(JSON.stringify(coll.toJSON()));
// yields
"[{"name":"a"},{"name":"b"},{"name":"c"},{"name":"d"},{"name":"e"}]"