Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于JS中的键将值附加到对象内部的数组_Javascript_Arrays_Object - Fatal编程技术网

Javascript 基于JS中的键将值附加到对象内部的数组

Javascript 基于JS中的键将值附加到对象内部的数组,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象,希望根据键将值附加到其中的数组中 例如 var A = {}; A[room1] = ["1"]; A[room2] = ["2"]; A[room3] = ["3"]; 看起来像 A = {"room1":["1"], "room2":["2"], "room3":["3"]}; 但我想要的是,每当用户给出一些与已经添加的键对应的值时,而不是覆盖我想要附加在其中的前一个值 例如,如果值为101,我希望将其添加到键room1,以便以后可以轻松检索这些值 所以这次整个物体变成了

我有一个对象,希望根据键将值附加到其中的数组中

例如

var A = {};
A[room1] = ["1"];
A[room2] = ["2"];
A[room3] = ["3"];
看起来像

A = {"room1":["1"], "room2":["2"], "room3":["3"]};
但我想要的是,每当用户给出一些与已经添加的键对应的值时,而不是覆盖我想要附加在其中的前一个值

例如,如果值为
101
,我希望将其添加到键
room1
,以便以后可以轻松检索这些值

所以这次整个物体变成了

A = {"room1":["1","101"], "room2":["2"], "room3":["3"]};
现在,如果我想将
201
添加到
room2
键,它将是:

A = {"room1":["1","101"], "room2":["2","201"], "room3":["3"]};
我试过什么?

我有一个数组。我不想使用很多数组

var arr = [];
只要我把它推到数组中

arr.push(value);

但是将其推到数组会导致向所有而不是相应的键添加值。[此答案的第一部分基于OP问题的先前版本,该版本现已编辑为不同的问题。有关适用于问题当前编辑的解决方案,请参阅此答案的第二部分(当整个问题变成其他问题时,会把事情弄得一团糟。]]

原始答案 您只需测试键是否已经存在,并检查是否已经存在数组。如果键不存在,请添加它。如果键存在并且已经是数组,只需将另一个值推入数组。如果键存在,但它不是数组,请获取该值,然后将键重置为包含前两个值的数组

下面是执行此操作的代码:

function addValue(obj, key, value) {
    if (obj.hasOwnProperty(key)) {
        // check if it's already an array using the recommended way of detecting an array
        if (Object.prototype.toString.call(obj[key]) === "[object Array]")
            obj[key].push(value);
        } else {
            var firstVal = obj[key];
            obj[key] = [firstVal, value];
        }
    } else {
        obj[key] = value;
    }
}

最新答案 仅供参考,您的数据结构选择很难读写,因为读写器都必须先检查值的类型,然后才能对其进行操作。如果项始终是数组,其中包含一个或多个元素,则会容易得多

// one item for each key
A = {"room1":["1"], "room2":["2"], "room3":["3"]};

// add 101 to room 1
A = {"room1":["1","101"], "room2:["2"], "room3":["3"]};

// add 201 to room 2
A = {"room1":["1","101"], "room2":["2","201"], "room3":["3"]};
然后,您需要任何特殊的代码来读取和写入,您只需检查该键是否存在,如果存在,则将新值推入其中。如果不存在,则添加数组

在这种情况下,添加一个值就是这样

function addValue(obj, key, value) {
    if (obj.hasOwnProperty(key)) {
        obj[key].push(value);
    } else {
        obj[key] = [value];
    }
}

[[此答案的第一部分基于OP问题的前一版本,该版本现已被编辑为另一个问题。有关适用于问题当前编辑的解决方案,请参阅此答案的第二部分(当整个问题更改为其他问题时,这确实会把事情搞砸。]]

原始答案 您只需测试键是否已经存在,并检查是否已经存在数组。如果键不存在,请添加它。如果键存在并且已经是数组,只需将另一个值推入数组。如果键存在,但它不是数组,请获取该值,然后将键重置为包含前两个值的数组

下面是执行此操作的代码:

function addValue(obj, key, value) {
    if (obj.hasOwnProperty(key)) {
        // check if it's already an array using the recommended way of detecting an array
        if (Object.prototype.toString.call(obj[key]) === "[object Array]")
            obj[key].push(value);
        } else {
            var firstVal = obj[key];
            obj[key] = [firstVal, value];
        }
    } else {
        obj[key] = value;
    }
}

最新答案 仅供参考,您的数据结构选择很难读写,因为读写器都必须先检查值的类型,然后才能对其进行操作。如果项始终是数组,其中包含一个或多个元素,则会容易得多

// one item for each key
A = {"room1":["1"], "room2":["2"], "room3":["3"]};

// add 101 to room 1
A = {"room1":["1","101"], "room2:["2"], "room3":["3"]};

// add 201 to room 2
A = {"room1":["1","101"], "room2":["2","201"], "room3":["3"]};
然后,您需要任何特殊的代码来读取和写入,您只需检查该键是否存在,如果存在,则将新值推入其中。如果不存在,则添加数组

在这种情况下,添加一个值就是这样

function addValue(obj, key, value) {
    if (obj.hasOwnProperty(key)) {
        obj[key].push(value);
    } else {
        obj[key] = [value];
    }
}
试试这个

 function pushValue(obj, key, value)
 {
      if(obj.hasOwnProperty(key) {
           var currentVal = obj[key];
           if(currentVal instanceof Array)
                obj[key].push(value);
           else
                obj[key] = [currentVal, value];
      } else {
           alert("No such key.");
      }
 }
试试这个

 function pushValue(obj, key, value)
 {
      if(obj.hasOwnProperty(key) {
           var currentVal = obj[key];
           if(currentVal instanceof Array)
                obj[key].push(value);
           else
                obj[key] = [currentVal, value];
      } else {
           alert("No such key.");
      }
 }

您的要求也可以通过这种方式实现

function pushValue(obj, key, value)
 {
     if(obj[key])
     {
       if(obj[key].push)
         {
            obj[key][obj[key].length] = value;
         }
       else
         {
            var xContainedVal = obj[key];
            obj[key] =[xContainedVal, value];
         }
     }
     else
     {
         alert("Key Not Found!");
     }
 }
更新:

function pushValue(obj, key, value)
 {
     if(obj[key])
     {
        obj[key][obj[key].length] = value;
     }
     else
     {
        obj[key] =[value];
     }
 }

您的要求也可以通过这种方式实现

function pushValue(obj, key, value)
 {
     if(obj[key])
     {
       if(obj[key].push)
         {
            obj[key][obj[key].length] = value;
         }
       else
         {
            var xContainedVal = obj[key];
            obj[key] =[xContainedVal, value];
         }
     }
     else
     {
         alert("Key Not Found!");
     }
 }
更新:

function pushValue(obj, key, value)
 {
     if(obj[key])
     {
        obj[key][obj[key].length] = value;
     }
     else
     {
        obj[key] =[value];
     }
 }


你试图解决什么问题?你到底在哪里?你知道数组是如何工作的吗?是的,我知道,我正在使用
.push()向数组添加值
但关键是,应将值添加到相应的keyFYI中,这是一个令人讨厌的数据结构。任何读者都必须在使用数据之前检查数据类型。为什么不让每个元素都成为一个数组,其中包含一个或多个元素?您试图解决什么问题?您到底在哪里卡住了?请回答你们知道数组是如何工作的吗?是的,我知道,我正在使用
.push()向数组添加值
但重点是值应该添加到相应的keyFYI中,这是一个令人讨厌的数据结构。任何读者都必须在能够使用数据之前检查数据的类型。为什么不让每个元素都成为一个数组,其中包含一个或多个元素?数组。isArray难道不更简单吗?@SimonM-是的,在新的b中rowsers必须具备这一点。需要IE9。如果这是我的代码,我可能会有一种跨浏览器的方式来检查数组,作为isArray的垫片或实用函数。注意……我应该检查一下。我已经更新了问题,在这种情况下,你的答案也会一样吗???@VarunMalhotra-将来,请不要更改你的问题是一个全新的问题,就像你刚才所做的那样,因为它会使人们为帮助你所做的一切无效,而这对他们来说确实是不公平的。如果必须的话,你可以在你的问题中添加一些新的内容,但不要改变整个内容。无论如何,看看我在回答的末尾已经添加了什么。不会
Array.isArray吗
更简单?@SimonM-是的,在新的浏览器中有足够的功能。需要IE9。如果它是我的代码,我可能会有一种跨浏览器的方法来检查数组作为iArray的垫片或作为实用函数。注意……我应该检查一下。我已经更新了问题,在这种情况下,你的答案也会一样吗??@VarunMalhotra-在未来,请不要像你刚才那样把你的问题变成一个全新的问题,因为这会使人们为帮助你所做的一切无效,这对他们来说真的不公平。如果你必须的话,你可以在你的问题中添加一些新内容,但不要改变整个问题。无论如何,看看我已经添加了什么答案的结尾。当为键添加第二个值时,会丢失
currentVal
。它也不会