javascript - 如何使用循环将 key 对添加到对象文字中——而不覆盖现有条目?

标签 javascript jquery object key literals

我正在从 ul 列表中读取输入字段“名称”和“值”属性。没有两个列表具有相同数量的输入,并且“名称”和“值”属性在读取之前是未知的。

<ul id="options_set1">
    <li><input name="width" value="10" /></li>
    <li><input name="height" value="20" /></li>
    <li><input name="depth" value="5" /></li>
</ul>
<ul id="options_set2">
    <li><input name="finish" value="printed" /></li>
    <li><input name="mounting" value="spacer" /></li>
</ul>

我迭代所有输入,收集 ul id 'options_set_X' 作为我的对象的文字,以及名称:值对:

var signState = {}; //My object to be populated

var optionSet = '';
var optionName = '';
var optionValue = '';

$("ul li input").each(function() {
  var optionSet = $(this).parent().parent().attr('id');
  signState[optionSet] = {};
  optionName = $(this).attr('name');
  optionValue = $(this).val();
  signState[optionSet][optionName] = optionValue;
});

我无法理解的是如何防止此循环替换对象中每个“optionSet”文字中的任何现有名称:值对?

我怀疑这是因为我重新启动了signState[optionSet] = {};文字。

我需要一种方法来为给定的文字添加名称:值对,而不干扰任何现有的关联。

我在网上读到的任何内容都没有涉及这种特定情况,因为我使用变量作为键名称和键值 - 这使问题变得复杂。

最佳答案

试试这个:

var signState = {};

$("ul li input").each(function() {
    var set, name, value;
    set    = $(this).parent().parent().attr('id');
    name   = $(this).attr('name');
    value  = $(this).val();

    /* Create a fresh object if it doesn't exist, 
     * otherwise assign it the existing one. */
    signState[set] = signState[set] || {};

    /* Again, assign a fresh value if it was undefined or empty 
     * otherwise assign it the existing one. */
    signState[set][name] = signState[set][name] || value;

});

现在,如果您设置的值为false0,那么它将被覆盖。如果您不希望这样,则必须使用三级运算符来确保正确:

signState[set][name] = typeof signState[set][name] !== "undefined"
    ? signState[set][name]
    : value;

三级运算符语法如下:definition = when is true ? this : else this; - 这对此非常有用。

关于javascript - 如何使用循环将 key 对添加到对象文字中——而不覆盖现有条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30782196/

相关文章:

javascript - 我的js代码出了什么问题?

c++ - cout 一个带有类定义的变量

javascript - 使用 MarkerClustererPlus 和 OverlappingMarkerSpiderfier 重叠指针

jquery - 无法同时设置表格高度和 tr

javascript - 如何添加延迟计时器?

javascript - 在 JavaScript 中使用键向对象添加属性

java - 有效的对象映射

javascript - 想要使用图表,它可以给你图表库 javascript 中的某些东西带来差异

javascript - 在javascript中使用鼠标坐标,如何适应不同的屏幕尺寸?

javascript - 获取 Bootstrap 预输入功能以处理 Rails 中的数据库查询