JavaScript:操纵两个数组
我刚刚开始学习JavaScript,对如何处理这个问题感到迷茫 问题是: 约翰、埃德、萨姆、亚历克斯和马克这五个人分别是16岁、25岁、18岁、30岁和27岁 我想使用数组和函数来输出五个函数中最年轻和最老的 我试图形成两个数组,即JavaScript:操纵两个数组,javascript,Javascript,我刚刚开始学习JavaScript,对如何处理这个问题感到迷茫 问题是: 约翰、埃德、萨姆、亚历克斯和马克这五个人分别是16岁、25岁、18岁、30岁和27岁 我想使用数组和函数来输出五个函数中最年轻和最老的 我试图形成两个数组,即 var Name = ['John', 'Ed', 'Sam', 'Alex', 'Mark']; var Age = [16, 25, 18, 30, 27]; 我发现很难操纵这些数组以获得所需的结果 我该如何处理这些数组,以便它可以打印例如,最小的人是Jo
var Name = ['John', 'Ed', 'Sam', 'Alex', 'Mark'];
var Age = [16, 25, 18, 30, 27];
我发现很难操纵这些数组以获得所需的结果
我该如何处理这些数组,以便它可以打印例如,最小的人是John,最大的人是Alex?您需要使用对象数组-例如
var People = [{ name : 'John', age : 16 }, .... ]
所以你可以把年龄和名字放在一起。然后将排序函数与自定义排序函数一起使用
var PeopleSorted = People.sort( function( a, b ) { return a.age - b.age; });
PS.关于Array.sort的更多信息-var Name=['John','Ed','Sam','Alex','Mark'];
变量年龄=[16,25,18,30,27];
var AgeFromName={};
对于(变量i=0;i
var name=['John','Ed','Sam','Alex','Mark'],
年龄=[16,25,18,30,27];
//将ages数组减少为包含最年轻和最老的对象
var数据=年限.减少(功能(备忘录、年限、索引){
//对于年龄数组中的每个成员
//如果年龄小于最小的
if(年龄<备忘录最小年龄){
//然后设定为最年轻的年龄
memo.mineet.age=年龄;
//并通过索引从名称数组中获取名称来存储名称
memo.mineet.name=名称[索引];
}
//对最年长的人也这样做
如果(年龄>备注.最早.年龄){
memo.oldest.age=年龄;
memo.oldest.name=名称[索引];
}
返回备忘录;
//为此对象创建默认种子,
//默认最小年龄为无限,默认最大年龄为负无限
}, {
最年轻的:{
年龄:无限
},
最老的:{
年龄:-无穷大
}
});
//返回的数据对象与初始种子对象的格式相同
console.log(data.name);
console.log(data.oldest.name);
您可以创建一个对象数组,其中每个对象都有一个名称
和年龄
属性,这将允许您按年龄对数组进行排序,从而轻松获得最年轻或最老的对象。至少还有一个答案涵盖了这一点,所以我不会在这里重复
既然您提到您刚刚开始使用JavaScript,您可能会喜欢一些通过数组循环的常规做法,等等,因此,对于您在问题中定义的两个数组,如果您想让最年轻的人在年龄数组中循环,以找到最低年龄的位置,然后从名称数组中的相应位置输出名称:
function getYoungest(names, ages) {
if (names.length != ages.length || names.length === 0)
return ""; // stop if arrays were a different length or empty
var i,
y,
a = Number.MAX_VALUE;
for (i=0; i < ages.length; i++) {
if (ages[i] < a) {
a = ages[i];
y = names[i];
}
}
return y;
}
var Name = ['John', 'Ed', 'Sam', 'Alex', 'Mark'],
Age = [16, 25, 18, 30, 27];
console.log(getYoungest(Name, Age)); // 'John'
函数(姓名、年龄){
if(names.length!=ages.length | | names.length==0)
返回“”;//如果数组长度不同或为空,则停止
var i,
Y
a=数字。最大值;
对于(i=0;i
上面使用a
来记录迄今为止的最低年龄,并使用y
来记录与该年龄对应的姓名,当然,您可以添加额外的变量来同时跟踪到目前为止的最高年龄和相应的名称,以便只需通过数组一次就可以输出最年轻和最老的
(当然,如果您不想对数组进行排序,或者在排序没有帮助的情况下,类似于上述内容的内容也适用于对象数组。)您通常不会像看到的那样对数据进行结构化 用它做任何事情都太复杂了
var names = ['John', 'Ed', 'Sam', 'Alex', 'Mark'];
var ages = [16, 25, 18, 30, 27];
如果在某个假设情况下,您实际上必须处理该问题,您可以通过以下方式将其正常化:
var people = names.map(function (name, i) {
return {
name: name,
age: this[i]
};
}, ages);
映射的结果与写入相同:
var people = [
{"name":"John","age":16},
{"name":"Ed","age":25},
{"name":"Sam","age":18},
{"name":"Alex","age":30},
{"name":"Mark","age":27}
];
(是的,引用属性名是因为我用JSON.stringify
cos我很懒)
排序变得非常简单:
people.sort( function( a, b ) { return a.age - b.age; });
var youngestName = people[0].name,
oldestName = people[people.length-1].name;
这样,如果你有控制权,首先使用适当的结构。
是一个很好的答案,尽管你可能想考虑提供一个比W3Studio更有名的来源的链接——查看为什么它是坏的信息——比如Mozilla开发者网络():RayNOS + 1用于重构数据。这样的结构更自然。@Raynos-这是从任何数据库获得的结构-那么为什么还要执行两个额外的步骤呢?(将数据放在单独的数组中,然后将其组装)在这种情况下,我认为重构是好的,因为OP显然编写了一些简单的代码,可以很容易地更改为这样。否则,在排序之前,必须添加代码将这些数组转换为对象数组。另外,请不要以大写字母开头变量名。+1,@Raynos:从这个问题来看,OP显然有一个需要解决的概念问题;如何“使用数组和函数”来解决排序人员及其各自年龄的问题。OP声明当前结构存在问题,鉴于此,解决方案向OP展示了如何正确格式化数据以帮助解决该问题。请注意(在JavaScript中)惯例是以小写字母开头变量名。以大写字母开头的名字通常是为您保留的。谢谢。但是这对于初学者来说有点复杂…:)@user1149232这是编程时的错误态度。你不应该说“哦,那太难了,我什么都不想学。”你需要马上向人们询问你试图理解但对初学者来说“太难”的事情。@Incognito,谢谢你的建议。我只是想说,这将有助于获得正确的基础知识,而不是走捷径到先进的程序。非常感谢。我开始明白了。在我拿到co之前还有很长的路要走var people = [
{"name":"John","age":16},
{"name":"Ed","age":25},
{"name":"Sam","age":18},
{"name":"Alex","age":30},
{"name":"Mark","age":27}
];
people.sort( function( a, b ) { return a.age - b.age; });
var youngestName = people[0].name,
oldestName = people[people.length-1].name;