数组数组不能分配给字符串typescript angular 2的数组

时间:2017-05-03 14:15:04

标签: arrays angular typescript

我是打字稿和角度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>

谢谢!

2 个答案:

答案 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;
  }
}