我是打字稿和角度2的新手,我不知道如何解决它。
我有一个工作日数组和七个数字的数组,或0或1。 每个'1'对应一个工作日,因此星期一将是1000000,星期二将是0100000,星期三是0010000,依此类推。
如何在函数中说WeekDays数组的第一个对象必须匹配Frequency数组的第一个对象,依此类推?我想显示正确的名称,所以如果我给它的数字是1000000我必须显示'星期一',如果数字是0010100,我将显示'星期三和星期五'。
如果我简单地将两个数组等同,它就会给我“Type'字符串'不能分配给'number'类型”,而且我无法更改Frequency数组,因为它来自服务器。
@Component
weekDays: string[] = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
frequencyArray: number[] = [1, 0, 0, 0, 0, 0, 0]; //or whatever you want
loadFrequencyLabel() {
var binary = this.prescription.frequencyArray;
var label: string;
for (var i = 0; i < binary.length; i++) {
binary[i] = this.weekDays[i];
return label;
}
}
模板
<p class="frequency-label">{{loadFrequencyLabel()}}</p>
谢谢!
答案 0 :(得分:2)
您已将frequencyArray
设置为number[]
,weekDays
设置为string[]
。没关系。我想你要做的是制作第三个string[]
,其中包含frequencyArray
包含1的工作日:
let weekDays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
let frequencyArray = [1, 0, 0, 1, 0, 0];
let days = frequencyArray.reduce((acc, curr, index) => {
if (curr === 1) acc.push(weekDays[index]);
return acc;
}, []);
console.log(days.join(' and '));
我稍微简化了代码,使其更容易理解。 reduce
函数实际上将数组简化为单个值,或者在本例中为另一个数组。第一个参数是为数组中的每个元素调用的函数(在我名为curr
的参数中)。它还在“累加器”(在我名为acc
的参数中)跟踪结果。累加器的初始值作为第二个参数传递给reduce
。
因此,最后,days
包含frequencyArray
包含1的星期几。
然后你只需在结果上调用join
方法,并使用“和”作为分隔符。
请注意,我使用的是ES2015语法,它可以与你可能用于Angular 2的TypeScript一起使用。
答案 1 :(得分:0)
你的频率数组不是一个数组,它只是一个数字。
@Component
weekDays: string[] = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
frequencyArray: number[] = [1, 0, 0, 0, 0, 0];
loadFrequencyLabel() {
var binary = this.prescription.frequencyArray;
var label: string;
for (var i = 0; i < binary.length; i++) {
binary[i] = this.weekDays[i];
return label;
}
}