【问题标题】:Array of numbers not assignable to array of strings typescript angular 2数字数组不可分配给字符串数组打字稿角度2
【发布时间】:2017-10-01 10:26:06
【问题描述】:

我是 typescript 和 angular 2 的新手,我不知道如何解决。

我有一个工作日数组和一个由七个数字组成的数组,即 0 或 1。 每个 '1' 对应一个工作日,所以星期一是 1000000,星期二是 0100000,星期三是 0010000,以此类推。

我怎么能在函数中说 WeekDays 数组的第一个对象必须匹配 Frequency 数组的第一个对象等等?我想显示正确的名称,所以如果我给它的数字是 1000000,我必须显示“星期一”,如果数字是 0010100,我必须显示“星期三和星期五”。

如果我简单地将两个数组等同起来,它会给我“类型'字符串'不可分配给类型'数字'”,并且我无法更改频率数组,因为它来自服务器。

@组件

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>

谢谢!

【问题讨论】:

  • 无法理解你的逻辑,就像你为什么在 for 循环中写 return 一样。任何方式将frequencyArray: number[] = [1000000] 更改为frequencyArray:any[] = [1000000]
  • 我不能,因为那组数字来自服务器,现在我写在那里让你理解。无论如何我编辑了这个问题,数组是 [1, 0, 0, 0, 0, 0, 0] @ParthGhiya
  • 无论如何我都在 for 循环中写了 return,因为它必须为他找到的每个 1 返回 Day 的名称。
  • 那么二进制永远是1,因为在第一个循环的迭代中它会返回&结束

标签: arrays angular typescript


【解决方案1】:

您有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。

【讨论】:

  • 非常感谢,太完美了!
【解决方案2】:

您的频率数组不是数组,它只是 1 个数字。

@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;
  }
}

【讨论】:

  • 是的@woodsprite,你说得对,我编辑了代码,但问题仍然存在。我确定这是我的错,因为我不明白我该怎么做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 2021-05-05
  • 2018-07-18
  • 2021-12-07
  • 1970-01-01
  • 2010-10-09
相关资源
最近更新 更多