arrays - 如何在 Angular 2+ 中访问 JSON 字符串数组中的字符串?
问题描述
我是 Angular 和编码的新手。
我目前有这行代码在我的 json 中过滤我的品牌。那段代码就是m.Properties
. 基本上,下面的代码所做的是查看品牌并过滤品牌属性与filteredProperties
数组中的字符串相同的品牌。
for (var i = this.filteredProperties.length - 1; i >= 0; i--) {
if (this.filteredProperties[i] == property) {
this.visibleBrands = this.brands.filter(m => m.Properties == this.filteredProperties.find(y => y === m.Properties));
}
}
但是现在我的 JSON 看起来像这样,请注意它是硬编码到我的服务中的:
import { Injectable } from '@angular/core';
import { Brands } from '../models/brand.model';
@Injectable()
export class BrandService {
getBrands(): Brands[] {
return [
{
"Id": 1,
"Title": "Alternative Investments",
"Description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin ornare lectus, quis gravida tortor venenatis nec.",
"ImageUrl": "C:/Users/xy57418/Pictures/Anguar Rewrite/PlaceHolder BrandLogos.png",
"FundsUrl": "www.google.com",
"OurPeopleUrl": "www.google.com",
"WhyInvestUrl": "www.google.com",
"MoreInfoUrl": "www.google.com",
"Properties": ["institutional"],
},
{
"Id": 2,
"Title": "Customised Solutions",
"Description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin ornare lectus, quis gravida tortor venenatis nec. ",
"ImageUrl": "C:/Users/xy57418/Pictures/Anguar Rewrite/PlaceHolder BrandLogos.png",
"FundsUrl": "www.google.com",
"OurPeopleUrl": "www.google.com",
"WhyInvestUrl": "www.google.com",
"MoreInfoUrl": "www.google.com",
"Properties":["personal"],
},
{
"Id": 3,
"Title": "Future Growth",
"Description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin ornare lectus, quis gravida tortor venenatis nec. ",
"ImageUrl": "C:/Users/xy57418/Pictures/Anguar Rewrite/PlaceHolder BrandLogos.png",
"FundsUrl": "www.google.com",
"OurPeopleUrl": "www.google.com",
"WhyInvestUrl": "www.google.com",
"MoreInfoUrl": "www.google.com",
"Properties": ["institutional"],
},
{
"Id": 4,
"Title": "Global Emerging Markets",
"Description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin ornare lectus, quis gravida tortor venenatis nec. ",
"ImageUrl": "C:/Users/xy57418/Pictures/Anguar Rewrite/PlaceHolder BrandLogos.png",
"FundsUrl": "www.google.com",
"OurPeopleUrl": "www.google.com",
"WhyInvestUrl": "www.google.com",
"MoreInfoUrl": "www.google.com",
"Properties": ["institutional", "personal"],
},
]
}
}
我的模型如下所示:
export class Brands {
Id: number;
Title: string;
Description: string;
ImageUrl: string;
FundsUrl: string;
OurPeopleUrl: string;
WhyInvestUrl: string;
MoreInfoUrl: string;
Properties: string[];
}
因此,您可以看到发生的问题是当我选择时它返回 undefined m.Properties
。我正在使用输入复选框进行过滤。我不确定如何进行。
非常感谢你。
编辑:这是我的输入框代码:
<input type="checkbox" name="Personal" value="Personal" [(ngModel)]="Personal" (change)="checkValue(Personal, property='personal')"/> Personal<br />
所以当输入框被点击时会发生什么,该属性被添加到数组filteredProperties
中。这些是当前在 JSON 属性中查找的属性。
编辑2:
所以我能够使用@trichetriche 的部分答案并使用indexOf
来获得结果。
我的代码:
this.visibleBrands = this.brands.filter(item => item.Properties.some(property => this.filteredProperties.indexOf(property) > -1));
解决方案
如果我理解正确,您正在尝试检查是否至少有一个m.properties
在您的brand.properties
.
如果是这种情况,您可以这样做:
const data = [{
"Id": 4,
"Title": "Global Emerging Markets",
"Description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin ornare lectus, quis gravida tortor venenatis nec. ",
"IUrl": "www.google.com",
"FUrl": "www.google.com",
"OUrl": "www.google.com",
"WUrl": "www.google.com",
"MUrl": "www.google.com",
"Properties": ["institutional", "personal"],
}];
const validProperties = ['personal', 'financial'];
const invalidProperties = ['marital', 'governmental'];
console.log(data.filter(item => item.Properties.some(property => validProperties.indexOf(property) !== -1)));
console.log(data.filter(item => item.Properties.some(property => invalidProperties.indexOf(property) !== -1)));
您必须“比较”两个数组:这意味着一个数组必须至少有一个元素与另一个数组匹配。
为此,您将首先使用filter
:它将删除任何不符合条件的项目。
接下来,您必须检查Properties
数组中的每一项,并检查该项是否包含在第二个数组中。
这是用 完成的some
,可以这样总结
遍历数组的每个元素;如果有一项符合条件,则停止迭代并返回 true。
条件是array.includes
,我猜这是不言自明的。
推荐阅读
- elasticsearch - 字段上 Elasticsearch .net 中的 DateRange
- firebase - 将 Blazor 部署到 Firebase 并出现错误 Firebase Hosting Setup Complete
- javascript - 打字稿:将对象属性标记为不可枚举?
- python - 导入 discord.py 返回错误“ModuleNotFoundError: aiohttp”
- codeigniter - 如何在codeigniter中搜索全名
- amazon-web-services - 在 Athena AWS 中重命名列名
- solr - SOLR 复制计数器不断重置
- php - 如何在搜索时修复 web.php 中的路由而不会出现 404 错误?
- python - 在 AJAX 调用中传递 JSON 对象而不是数组 ->DJANGO
- android - 视图后面的访问表面