Angular 2 / Typescript - 如何检查对象数组以查看属性是不是具有相同的值?

Posted

技术标签:

【中文标题】Angular 2 / Typescript - 如何检查对象数组以查看属性是不是具有相同的值?【英文标题】:Angular 2 / Typescript - how to check an array of objects to see if a property has the same value?Angular 2 / Typescript - 如何检查对象数组以查看属性是否具有相同的值? 【发布时间】:2017-08-07 18:30:34 【问题描述】:

This question 在 javascript 中执行此操作,但我原以为在 Typescript 中我可以执行某种映射/过滤操作来执行相同的操作。

我有一个名为Room 的对象数组。每个Room 都有一个名为Width 的属性(实际上是一个字符串,例如'4m'、'5m'、'6.5m')。

我需要检查整个数组,看看是否所有的宽度都相同。

基于这个问题,我有这个问题,但我想知道 TypeScript 是否有更好的东西:

let areWidthsTheSame = true;
this.qp.rooms.forEach(function(room, index, rooms) 
  if (rooms[index] != rooms[index+1]) areWidthsTheSame = false;
);  

有什么想法吗?

仅供参考,链接的问题有一个链接到these 性能测试的评论,这在这个问题的上下文中很有趣:

【问题讨论】:

【参考方案1】:

这可以通过以下方式完成:

const widthArr = rooms.map(r => r.width);
const isSameWidth = widthArr.length === 0 ? true :
                          widthArr.every(val => val === widthArr[0]);

我们首先将房间数组转换为宽度数组,然后检查宽度数组中的所有值是否相等。

【讨论】:

很好——我想你可以把它写成一行,对吧? const isSameWidth = rooms.map(r => r.width).every(val => val === rooms[0].width); 不,因为我们访问第一个索引,所以如果数组为空,你会得到一个异常,如果你 100% 确定你的数组中有房间,那么你可以安全地这样做@ rmcshary

以上是关于Angular 2 / Typescript - 如何检查对象数组以查看属性是不是具有相同的值?的主要内容,如果未能解决你的问题,请参考以下文章

带有 Ionic 2 Angular 2 和 TypeScript 的 OpenPGP

如何部署我的 Angular 2 + Typescript + Webpack 应用程序

Angular 2+:如何在 Angular 的 Typescript 组件中解析 json 数据

如何使用 TypeScript 在我的 Angular 2 组件中声明模型类?

Angular 2\TypeScript 中 export 关键字的确切含义是啥?

如何在 Angular 2 / Typescript 中声明全局变量? [关闭]