【问题标题】:Problem when comparing array elements (Javascript)比较数组元素时出现问题(Javascript)
【发布时间】:2019-01-10 23:40:54
【问题描述】:

嘿,我有一个小问题。所以基本上我将字符串作为参数传递给函数,然后将其转换为数组,我试图将生成的数组元素相互比较,如果它们相等,它应该返回“)”否则“(”,但有比较元素时出现问题并且值错误。也许有人可以帮助我。

function duplicateEncode(word) {
  let splitString = word.split("");
  let newArr = splitString.map((val, index, arr) => {
    for (let i = 0; i < splitString.length; i++) {
      if (val === arr[i]) {
        return ')';
      } else {
        return '(';
      }
    }
  });
  return newArr.join('');
}

【问题讨论】:

  • 你能把这个问题说得更清楚吗?
  • 循环有什么问题?假设我们有一个字符串“堆栈”,当函数启动时,我将它作为参数传递给函数,最终结果应该看起来像“(((((”),因为每个字母都是不同的,但现在它返回“)((( ("
  • 假设字符串是“hello peeps”,它返回“((()(((())((”?在“hello”中,第一个“l”是(但第二个“l " 是) 对吗?
  • 您拆分字符串并映射元素,第一个元素将始终匹配并返回 ) 作为 for 循环的索引,并且映射迭代是相同的。但它会为所有其他迭代返回(,因为您总是将索引0 处的元素与其他索引进行比较。所以方法的输出总是)((((((......
  • 谢谢,我就是这样

标签: javascript arrays loops dictionary compare


【解决方案1】:

使用 Javascript 的 Map 对象来存储当前字母是否存在。

function duplicateEncode(word){
	let m = new Map();
        let splitString= word.split("");
	let coded = "";
	splitString.map( s => {
		if(!m[s]){
			m[s] = true
			coded += "("
		} else {
			coded += ")"
		}
	})
	return coded
}
console.log(duplicateEncode("stack"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多