将对象属性作为函数参数传递?
Passing object properties as function argument?
我有这三个功能,它们基本上做同样的事情。他们从承诺中获取数据,并为每个函数创建一个具有相同属性的对象。
我想把它擦干:
var getFiles = function() {
return wg.getFiles().then(function(data) {
processData(data, {
type: "File",
title: x.filename,
created: x.Created,
path: x.path
})
})
}
var getEvents = function() {
return wg.getEvents().then(function(data) {
processData(data, {
type: "Event",
title: x.Title,
created: x.Created,
path: x.path
})
})
}
var getFeedback = function() {
return wg.getFeedback().then(function(data) {
processData(data, {
type: "Review",
title: "by " + x.Author,
created: x.Created,
path: x.path
})
})
}
var processData = function(data, props) {
var x = _(data)
.map(function(x) {return props})
.value()
.map(function(x) {
activties.push(x)
})
}
我想通过将 processData
函数更改为如下内容来解决这个问题:
var processData = function(data, props) {
var x = _(data)
.map(function(x) {
return {
type: x[props[0]],
title: x[props[1]],
created: x[props[3]],
path: "/" + x[props[4]]
}
})
.value()
.map(function(x) {
activties.push(x)
})
}
然后我可以这样称呼它:
var getFiles = function() {
return wg.getFiles().then(function(data) {
processData(data, ['filename', 'created', ['FileRef']['lookupValue']])
})
}
这就是我的想法,但如果有人有更好的建议,我愿意。
不要传递 属性 名称,传递函数:
function getFiles() {
return wg.getFiles().then(processData("File", _.property("filename")));
}
function getEvents() {
return wg.getEvents().then(processData("Event", _.property("Title")));
}
function getFeedback() {
return wg.getFeedback().then(processData("Review", function(x) { return "by " + x.Author; })));
}
function processData(type, makeTitle) {
return function(data) {
return data.map(function(x) {
return {
type: type,
title: makeTitle(x),
created: x.Created,
path: x.path
};
});
};
}
Promise.all([getFiles(), getEvents(), getFeedback()])
.then(function(arrays) {
var activities = _.flatten(arrays);
…
});
为方便起见,我使用了一些 underscore/lodash 函数,但您也可以不用它们。
我有这三个功能,它们基本上做同样的事情。他们从承诺中获取数据,并为每个函数创建一个具有相同属性的对象。
我想把它擦干:
var getFiles = function() {
return wg.getFiles().then(function(data) {
processData(data, {
type: "File",
title: x.filename,
created: x.Created,
path: x.path
})
})
}
var getEvents = function() {
return wg.getEvents().then(function(data) {
processData(data, {
type: "Event",
title: x.Title,
created: x.Created,
path: x.path
})
})
}
var getFeedback = function() {
return wg.getFeedback().then(function(data) {
processData(data, {
type: "Review",
title: "by " + x.Author,
created: x.Created,
path: x.path
})
})
}
var processData = function(data, props) {
var x = _(data)
.map(function(x) {return props})
.value()
.map(function(x) {
activties.push(x)
})
}
我想通过将 processData
函数更改为如下内容来解决这个问题:
var processData = function(data, props) {
var x = _(data)
.map(function(x) {
return {
type: x[props[0]],
title: x[props[1]],
created: x[props[3]],
path: "/" + x[props[4]]
}
})
.value()
.map(function(x) {
activties.push(x)
})
}
然后我可以这样称呼它:
var getFiles = function() {
return wg.getFiles().then(function(data) {
processData(data, ['filename', 'created', ['FileRef']['lookupValue']])
})
}
这就是我的想法,但如果有人有更好的建议,我愿意。
不要传递 属性 名称,传递函数:
function getFiles() {
return wg.getFiles().then(processData("File", _.property("filename")));
}
function getEvents() {
return wg.getEvents().then(processData("Event", _.property("Title")));
}
function getFeedback() {
return wg.getFeedback().then(processData("Review", function(x) { return "by " + x.Author; })));
}
function processData(type, makeTitle) {
return function(data) {
return data.map(function(x) {
return {
type: type,
title: makeTitle(x),
created: x.Created,
path: x.path
};
});
};
}
Promise.all([getFiles(), getEvents(), getFeedback()])
.then(function(arrays) {
var activities = _.flatten(arrays);
…
});
为方便起见,我使用了一些 underscore/lodash 函数,但您也可以不用它们。