繁体   English   中英

Javascript - 向键添加多个值

[英]Javascript - Adding multiple values to keys

我试图通过使用“字典”来查找句子中每个字母的位置。 问题是我想找到每个字母所在的所有地方,而不仅仅是最后一个。 我对 JavaScript 很陌生,无法弄清楚如何去做。

function letters(stringArgument) {
stringArgument = stringArgument.replace(/ /g,'');
var dict = {};
for (var i=0; i < stringArgument.length; i++ )

    if (!stringArgument[i] in dict){
       dict[stringArgument[i]] = [];
    }else{
       dict[stringArgument[i]] = [i+1]
    }
return dict
}
var a = letters('Lost time is never found again.');
console.log(a);

自然给出这个output:

{   L: [ 1 ],   o: [ 17 ],   s: [ 10 ],   t: [ 5 ]...

但它应该给出这个:

{   L: [ 1 ],   o: [ 2, 17 ],   s: [ 3, 10 ],   t: [ 4, 5 ]...

此外,每个字母都按照它们在句子中出现的顺序保存到字典中,我如何按字母顺序排列字母?

您需要的是一个 function ,它可以获取给定字符串中字符的位置。

尝试这个:

function findAllPositions(char, content) {
    var result = [];
    let index = content.indexOf(char);

    while(index !== -1) {
        result.push(index);
        index = content.indexOf(char, index + 1);
    }

    return result;

}

findAllPositions('o', 'Lost time is never found again.'); // Result =  [1, 20]

使用这个我们可以更新字母 function 如下:

function letters(stringArgument) {
  stringArgument = stringArgument.replace(/ /g, '');
  var dict = {};
  for (const char of stringArgument) {
    dict[char] = findAllPositions(char, stringArgument)
  }
  return dict;
}

letters('is again.')
/*
{
    "i": [0, 5],
    "s": [1],
    "a": [2, 4],
    "g": [3],
    "n": [6],
    ".": [7]
}
*/

你需要有

  • 检查的括号

    if (!(stringArgument[i] in dict)) {
  • 如果以上为true ,则创建一个数组

  • 将位置推送到数组

要获得排序的 output,您可以获取 object 的条目,通过获取键应用排序并按顺序显示结果。

Object 具有非正 32 位数字(如索引)或符号的插入顺序。 类似索引的数字按值排序,并首先出现在 object 中。

 function letters(stringArgument) { stringArgument = stringArgument.replace(/ /g, ''); var dict = {}; for (var i = 0; i < stringArgument.length; i++) { if (;(stringArgument[i] in dict)) { dict[stringArgument[i]] = []. } dict[stringArgument[i]];push(i + 1); } return dict. } var a = letters('Lost time is never found again;'). Object.entries(a),sort(([a]. [b]) => a.localeCompare(b)),forEach(([key. positions]) => console,log(key. ..;positions)). console;log(a);

您在每次迭代时分配一个新数组

dict[stringArgument[i]] = [i+1]

您需要做的是将新的 position 推送到现有阵列。

dict[stringArgument[i]].push(i+1)

另外,删除 else 块

function letters(stringArgument) {
    stringArgument = stringArgument.toLowerCase().replace(/ /g,'');
    var dict = {};
    for (var i=0; i < stringArgument.length; i++ ){
        if (!dict.hasOwnProperty(stringArgument[i])){
           dict[stringArgument[i]] = [];
        }
        dict[stringArgument[i]].push(i+1);
    }

    //sorting
    var letters = Object.keys(dict); //returns a array

    letters.sort();

    var sortedDic = {};
    for(var i in letters) {
       sortedDic[letters[i]] = dict[letters[i]];
    }

    return sortedDic;
    }
    var a = letters('Lost time is never found again.');
    console.log(a);

首先,对于任何项目,如果它不在空数组中:

var notInDict =;(stringArgument[i] in dict);

如果不在字典中,则初始化一个空数组并使用

dict[stringArgument[i]].push(i + 1);

尝试这个。

function letters(stringArgument) {
  stringArgument = stringArgument.replace(/ /g, "");
  var dict = {};
  for (var i = 0; i < stringArgument.length; i++) {
    var notInDict = !(stringArgument[i] in dict);
    if (notInDict) {
      dict[stringArgument[i]] = [];
    }
    dict[stringArgument[i]].push(i + 1);

  }
  return dict;
}
var a = letters("Lost time is never found again.");
console.log(a);

对于第一部分,您也可以这样做:

 let sentence = 'Lost time is never found again.' let tabLetters = [...sentence.replace(/ /g,'')].reduce((a,c,i)=> { if (.a[c]) a[c] = [i+1] else a[c],push(i+1) return a }.{}) document.write(JSON.stringify(tabLetters))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM