Javascript 从现有属性创建新数组
我有这样一个目标:Javascript 从现有属性创建新数组,javascript,arrays,angularjs,object,ionic-framework,Javascript,Arrays,Angularjs,Object,Ionic Framework,我有这样一个目标: export var PROJECT: any = { id: "1", name: "Hunkemoller", teammembers: [ { id: 1, name: "Sarah Johnson", firstname: "Sarah", role: "Manager" }, {
export var PROJECT: any = {
id: "1",
name: "Hunkemoller",
teammembers: [
{
id: 1,
name: "Sarah Johnson",
firstname: "Sarah",
role: "Manager"
},
{
id: 2,
name: "Christian Johnson",
firstname: "Christian",
role: "Employee"
}
等等
我正在制作一个应用程序,我想在其中添加一个搜索元素,以便您可以搜索不同的团队成员。我想初始化每个团队成员的所有属性“name”。这是唯一需要过滤的东西
我想到了两种方法:
var teamMembers = project.teammembers.name();
但是除了这个选项之外,如果我可以在对象之外使用name属性,那将是最好的
我走了这么远(我用的是离子2/角度2)
但它不起作用。我发现错误:无法读取未定义的属性“filter”
有人能帮我吗?提前感谢。您可以使用以下方法创建新的不同阵列:
var项目={
id:“1”,
姓名:“Hunkemoller”,
团队成员:[
{
id:1,
姓名:“莎拉·约翰逊”,
名字:“莎拉”,
角色:“经理”
},
{
id:2,
姓名:“克里斯蒂安·约翰逊”,
名字:“基督徒”,
角色:“员工”
}
]
};
log(project.teammembers.map(函数(项){return item.name}))代码>您可以使用以下方法创建新的不同阵列:
var项目={
id:“1”,
姓名:“Hunkemoller”,
团队成员:[
{
id:1,
姓名:“莎拉·约翰逊”,
名字:“莎拉”,
角色:“经理”
},
{
id:2,
姓名:“克里斯蒂安·约翰逊”,
名字:“基督徒”,
角色:“员工”
}
]
};
log(project.teammembers.map(函数(项){return item.name}))
它不应该是this.project.teammembers.name
,而应该是this.project.teammembers
,然后在结果过滤器中使用teammebers.name
if (val && val.trim() != '') {
this.project.teammembers.name =
this.project.teammembers.filter((teammember) => {
return (teammember.name.toLowerCase().indexOf(val.toLowerCase()) > -1);
})
}
或者你可以尝试这样的方法来过滤名字
this.project.teammembers.name = this.project.teammembers.filter(function(el) {
return (el.name === val.toLowerCase());
}).map(function(el) {
return el.firstname;
}).sort();
所以基本上你是通过名字过滤,然后如果你想要一个新的数组,它的名字按顺序排列。。。您可以执行映射
和排序
它不应该是this.project.teammembers.name
,而应该是this.project.teammembers
,然后在生成的过滤器中使用teammebers.name
if (val && val.trim() != '') {
this.project.teammembers.name =
this.project.teammembers.filter((teammember) => {
return (teammember.name.toLowerCase().indexOf(val.toLowerCase()) > -1);
})
}
或者你可以尝试这样的方法来过滤名字
this.project.teammembers.name = this.project.teammembers.filter(function(el) {
return (el.name === val.toLowerCase());
}).map(function(el) {
return el.firstname;
}).sort();
所以基本上你是通过名字过滤,然后如果你想要一个新的数组,它的名字按顺序排列。。。您可以执行映射
和排序
或使用下划线
或者使用下划线uz.map()
最终我成功了。
我从头开始,从一个硬编码数组中获取现有对象中的项
对于有相同问题的任何人,这是我的最终代码:
HTML:
我认为project.teammembers.name有点问题。现在有了新的变量“name”,它成功了。非常感谢你们的帮助 最终我成功了。
我从头开始,从一个硬编码数组中获取现有对象中的项
对于有相同问题的任何人,这是我的最终代码:
HTML:
我认为project.teammembers.name有点问题。现在有了新的变量“name”,它成功了。非常感谢你们的帮助 谢谢你的快速回复!我不再犯错误了,所以这很好。但它也不会过滤。它仍然显示所有的名字,没有过滤…我明白了,不幸的是代码仍然不能工作。我不确定这里出了什么问题。。没有错误,只是没有过滤下面的名称。感谢您的快速响应!我不再犯错误了,所以这很好。但它也不会过滤。它仍然显示所有的名字,没有过滤…我明白了,不幸的是代码仍然不能工作。我不确定这里出了什么问题。。没有错误,只是没有过滤下面的名称。感谢您的快速响应。很好,现在如何创建新数组:-)我很快就会尝试,但首先我想尝试它,而不创建新数组array@Thalaivar的答案应该能解决你的问题。您筛选了错误的元素。他正在筛选正确的元素(团队成员)。感谢您的快速响应。很好,现在如何创建新数组:-)我很快就会尝试,但首先我想尝试它,而不创建新数组array@Thalaivar的答案应该能解决你的问题。您筛选了错误的元素。他正在筛选正确的元素(团队成员)。
this.project.teammembers.name = this.project.teammembers.filter(function(el) {
return (el.name === val.toLowerCase());
}).map(function(el) {
return el.firstname;
}).sort();
var teamMembers = _.map(project.teammembers, function(item){
return item.name
});
<ion-searchbar (ionInput)="getNames($event)"></ion-searchbar>
<ion-list>
<ion-item *ngFor="let name of names">
{{ name }}
</ion-item>
</ion-list>
export class Page1 {
names;
}
constructor () {
this.initializeNames();
}
initializeNames() {
this.names = this.project.teammembers.map(function(item){ return item.name }); // Thanks a lot Amir for this !
}
getNames(ev) {
// Reset items back to all of the items
this.initializeNames();
// set val to the value of the searchbar
let val = ev.target.value;
// if the value is an empty string don't filter the items
if (val && val.trim() != '') {
this.names = this.names.filter((item) => {
return (item.toLowerCase().indexOf(val.toLowerCase()) > -1);
})
}
}