【问题标题】:How can I add key : value to an object only if key does not already exist? If key exists already then edit value仅当 key 不存在时,如何将 key : value 添加到对象?如果键已经存在,则编辑值
【发布时间】:2015-01-12 23:47:55
【问题描述】:

我正在从这样的纯文本文件中获取一个列表:

2: B D E
5: B C

并使用 javascript(没有插件)像这样重新排列列表

B: 2 5
D: 2
E: 5


        // rest of code file input , etc. not necessary to list here, imho

        var contents = e.target.result; // read contents of file

        var oldParts = contents.split(/\n/); // put each line of contents into array

        for (i = 0; i < oldParts.length; i++) {

            var allChar = oldParts[i].split( ' ' ); // each character from the line

            var truck = {};

            var tractor = "";

            var trailer = "";

            for (j = 0; j < allChar.length; j++) { 

                allChar[j] = allChar[j].replace(":", ""); // remove the ":" delimiter

                allChar[j].trim();

                trailer = allChar[0]; // get just the numbers

                if ( isNaN ( allChar[j] ) ) { // is not a number

                    tractor = allChar[j];


                    if ( truck.hasOwnProperty(tractor) ) {

                        console.log ( "already in" );

                    } else { 

                        console.log ( " needs to be added" ) ;

                        truck [ tractor ] = trailer;

                    }

                }

            }


            for ( tractor in truck ) {

                document.write ( tractor + " : " + truck[tractor] + "<br />" );

            } 

        }

上面的代码会这样写:

B: 2
D: 2
E: 2
B: 5
C: 5

这很接近,但我正在尝试检查卡车的属性,如果它等于拖拉机,只需附加拖车

我对卡车属性的所有尝试都是未定义的

我试过了

truck [ tractor ] = trailer;

if (tractor in truck) { // never is

我怎样才能得到卡车 [ tractor ] 的价值,看看我接下来需要做什么?

【问题讨论】:

  • 你说你尝试过的事情,实际上是你需要做的。您为什么不在您尝试过的地方发布代码 - 一个允许我们重现您的问题的最小示例 - 我们可以帮助您找到问题所在?
  • 好的,谢谢@ruakh。这是代码示例的jsfiddle。问题是,即使我清楚地将带有拖车值的拖拉机属性加载到卡车对象中,如果(卡车中的拖拉机)找不到它
  • 澄清一下:通过“最小示例”,我的意思是您应该将您的代码缩减为与您期望的行为不同的绝对最小程序。您的最小程序不需要从文件中读取,因此重现问题不需要我们创建文本文件。 (你需要在这里付出一些努力。见stackoverflow.com/help/mcve.
  • 在上面的示例中,“E”如何在“2:”行很明显时得到“5”。这里有点糊涂。当我说“如何”时,我的意思是为什么?

标签: javascript arrays hashtable associative-array


【解决方案1】:

我想你的意思是你的输出应该如下:

鉴于此:

2: B D E
5: B C

你想要的:

B: 2 5
D: 2
E: 2
C: 5

这是一个更短的简化版本:

var data = "2: B D E\n5: B C";
var hashTable = {}, finalString = "";

var dataArray = data.split("\n");
dataArray.forEach(function(i){
  var tempArr = i.split(':');
  tempArr[1].split(' ').forEach(function(j){
    if([undefined, ''].indexOf(j) != -1) return;

    (j in hashTable ) ? hashTable[j].push(tempArr[0].trim()) : hashTable[j] = [tempArr[0]];
  })
});
(function(){
   for(var s in hashTable){
     finalString += s + ": " + hashTable[s].join(' ') + "\n";
   }
}())
console.log(finalString);
//B: 2 5
//D: 2
//E: 2
//C: 5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2017-12-23
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多