【问题标题】:How would u create this function and perform it inside an array?你将如何创建这个函数并在数组中执行它?
【发布时间】:2021-03-25 12:50:14
【问题描述】:
  1. 我有一个array

  2. 我正在尝试创建一个带有two parametersfunction,它将返回一个基于conditionstring 值或表达式,例如乐队成员加入和离开的年份

3.我正在尝试在 array 内以新手方式在不带任何循环的情况下运行此 function

const everyMember = ['Mike Portnoy', 'Charlie Dominici', 'John Petrucci', 'John Myung', 'Kelvin Moore', 'Derek Sherinian', 'James Labrie', 'Mike Manzini'];

const calcActiveYear = function(yearJoined,yearLeft){
    if(calcActiveYear === ' '){
         `Member still present since ${year}`;
    }else{
    return yearLeft - yearJoined;
    }
    // return yearLeft - yearJoined;
}

const activeYear = [
    calcActiveYear(everyMember[0]),
    calcActiveYear(everyMember[1]),
    calcActiveYear(everyMember[2]),
    calcActiveYear(everyMember[3]),
    calcActiveYear(everyMember[4]),
    calcActiveYear(everyMember[5]),
    calcActiveYear(everyMember[6]),
    calcActiveYear(everyMember[7]),
]

console.log(activeYear);

这是我期待的那种输出 -

const calcActiveYear = function(yearJoined,yearLeft){
    return yearLeft- yearJoined;
}


const MIkePortnoy = calcActiveYear(1985,2010);
const CharlieDominici = calcActiveYear(1987,1990);
const JohnPetrucci = calcActiveYear();
const JohnMyung = calcActiveYear();
const KelvinMoore = calcActiveYear(1986,1994);
const DerekSherinian = calcActiveYear(1994,1999);
const JamesLabrie = calcActiveYear();
const mikeManzini = calcActiveYear();

console.log(MIkePortnoy,CharlieDominici,JohnPetrucci,JohnMyung, KelvinMoore, DerekSherinian, JamesLabrie)

请帮我看看你会怎么做,而不是在这里指出明显的错误。谢谢!

注意我正在尝试找出数组的局限性。没有对象、循环、原型。

【问题讨论】:

  • 您将calcActiveYear 明确设置为一个函数;你怎么期望它变成一个字符串?
  • 请提供清晰的输入输出集。读者不清楚
  • 在 calcActiveYear 定义中,它需要两个参数(yearJoined、yearLeft),而在 ActiveYear 数组中,您仅将成员名称作为单个参数传递。您能否详细说明您的输入和预期输出?
  • everyMember 是一个字符串列表,其中包含名称。现在您将其成员传递给 calcActiveYear,它是如何工作的?我相信everyMember 必须是带有{yearJoined, yearLeft} 的对象数组,这样才有意义。 calcActiveYear 需要以 {yearJoined, yearLeft} 作为输入

标签: javascript arrays function


【解决方案1】:

典型的技术是使用Array.prototype.map -

function calcActiveYear(yearJoined, yearLeft)
{ if (!yearLeft)
    return `Member active since ${yearJoined}`
  else
    return `Active ${yearJoined} - ${yearLeft}`
}

const members =
  [ { name: "Alice", joined: 2000, departed: 2020 }
  , { name: "Bob", joined: 1999, departed: 2010 }
  , { name: "Cindy", joined: 2005, departed: null }
  ]

console.log(members.map(m => calcActiveYear(m.joined, m.departed)))
[
  "Active 2000 - 2020",
  "Active 1999 - 2010",
  "Member active since 2005"
]

另一种有效的技术是for..of 循环 -

for (const m of members)
  console.log(`${m.name}: ${calcActiveYear(m.joined, m.departed)}`)
Alice: Active 2000 - 2020
Bob: Active 1999 - 2010
Cindy: Member active since 2005

根据您的评论,您可以在没有 Array.prototype.mapfor 循环的情况下执行此操作 -

function calcActiveYear(yearJoined, yearLeft)
{ if (!yearLeft)
    return `Member active since ${yearJoined}`
  else
    return `Active ${yearJoined} - ${yearLeft}`
}

function map(arr, transform, i = 0)
{ if (i >= arr.length)
    return []
  else
    return [transform(arr[i]), ...map(arr, transform, i + 1)]
}

const members =
  [ { name: "Alice", joined: 2000, departed: 2020 }
  , { name: "Bob", joined: 1999, departed: 2010 }
  , { name: "Cindy", joined: 2005, departed: null }
  ]

console.log(map(members, m => calcActiveYear(m.joined, m.departed)))

【讨论】:

  • 谢谢你。我只是想知道没有任何其他功能(如对象、循环或原型设计)的有经验的 brogrammers 将如何做到这一点。试图找到数组的局限性。
  • @Nafi 我用递归示例更新了帖子。这能回答你的问题吗?
  • 是的。这个递归例子肯定回答了我在找你的东西。再次感谢谢谢。
猜你喜欢
  • 2020-01-17
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
相关资源
最近更新 更多