我想在将元素写入数组之前执行更多逻辑:
tempDatensatz.push( () => {
var current = window.dataForDataTable[i].outbounds[key].updatedAt;
if (current) {
return current.toString();
} else {
return "".toString();
}
});
从该数组获取值将如下所示:
tempDatensatz[0]()
但是我想要相同的逻辑而不需要调用函数。我需要一个普通的数组,我得到一个像这样的值:
tempDatensatz[0]
我该怎么做?
更新 我把我的项目发布到gitHub,你可以看看你是否需要更好的理解:) https://github.com/te2020/GoEuro/blob/master/GoEuro/Views/Home/Index.cshtml
答案 0 :(得分:0)
使用立即调用的函数而不仅仅是函数:
tempDatensatz.push( (function(){
var current = window.dataForDataTable[i].outbounds[key].updatedAt;
if (current) {
return current.toString();
} else {
return "".toString();
}
})());
该函数将在定义后立即执行,返回结果。所以push不会push
对该函数的引用,而是推送它返回的值(结果)。
答案 1 :(得分:0)
您可以按如下方式编写代理:
function makeProxy(array) {
return new Proxy(array, {
get(target, property) {
return !isNaN(property) ? target[property]() : target[property];
}
});
}
const tempDatensatz = [];
const useThisOne = makeProxy(tempDatensatz);
useThisOne.push(() => alert("Hi, Jane!"));
useThisOne[0];

推送/写入数组将按预期工作,但检索其元素将通过get
处理程序执行该函数。
答案 2 :(得分:0)
您可以使用表达式,例如:
tempDatensatz.push(
window.dataForDataTable[i].outbounds[key].updatedAt
? window.dataForDataTable[i].outbounds[key].updatedAt.toString()
: ''
);
对于更复杂的表达式,您通常可以使用三元运算符。对于上面看起来像这样:
var tempDatensatz =
['companyId', 'mode', 'duration', 'outboundId', 'journeyId', 'departureTime',
'arrivalTime', 'stops', 'price', 'updatedAt', 'segments']
.map( prop => (window.dataForDataTable[i].outbounds[key][prop] || '').toString() );
在查看您关联的Azure B2C : Integration with IdentityServer时,您可以使用此“oneliner”完成所有操作:
{{1}}