标签: object-literal

JavaScript - 迭代表单输入并收集值作为对象中的键值对

我试图通过迭代输入来从表单中的多个输入字段收集值,然后将它们作为键/值对存储在对象数组中。然而,我正在努力寻找一种有效的方法来执行此操作,该方法不涉及长集 if if else 或 switch 语句。

概念:

<form>
  <input type="text">
  <input type="text">
  <input type="text">
  <input type="text">
</form>
Run Code Online (Sandbox Code Playgroud)

我想避免的:

var inputs = document.querySelectorAll('input');    

for (var i = 0; i < inputs.length; i++) {
  var myObject = {};

  if (i = 0) {
    myObject.val0 = inputs[i];
  } else if (i = 1) {
    myObject.val1 = inputs[i];
  } else if (i = 2) {
    myObject.val2 = inputs[i];
  } else if (i = 3) {
    myObject.val3 = inputs[i];
  } 

}
Run Code Online (Sandbox Code Playgroud)

关于如何更有效地完成此操作有什么建议吗?我的一个想法是使用括号表示法根据现有的 html 元素属性(可能是 …

javascript for-loop object-literal

2
推荐指数
1
解决办法
8952
查看次数

React.js:如何使用其使用状态挂钩设置器将多个项目正确附加到数组状态?

我的组件有一个应该存储对象数组的状态。我把它初始化为空。

    const [tableDataSource, setTableDataSource] = useState([])
Run Code Online (Sandbox Code Playgroud)

在成功获取并重新组织获取结果几次后,应将一个或多个对象文字附加到tableDataSource状态。期望的输出应该是

[
    {
        key: 1,
        key2: 'sample string value',
        key3: false,
    },
    {
        key: 'sample string value',
        key2: true,
    }
]
Run Code Online (Sandbox Code Playgroud)

我当前的获取结果是另一个包含2 个对象文字的数组。我尝试将此数组中的所有项目附加到状态设置器中。

    let dataSource = generateRows(showCompletedItems, fetchResult);
Run Code Online (Sandbox Code Playgroud)

上面的代码将获取结果重新组织为所需的输出。我在控制台中记录了dataSource并验证了它是否是一个 Array 对象并且它返回了true

在组件声明中的某个位置,我还有一个useEffect来记录当前的tableDataSource以输出更改。

    console.log('TABLE DATA SOURCE >>>>', tableDataSource, typeof tableDataSource);
Run Code Online (Sandbox Code Playgroud)

我很难使用其设置器将数组项附加到状态数组中。我尝试了方法#1:

    setTableDataSource(dataSource);
Run Code Online (Sandbox Code Playgroud)

控制台不记录任何内容。

方法#2:

    setTableDataSource((tableDataSource) => [...tableDataSource, dataSource])
Run Code Online (Sandbox Code Playgroud)

返回一个嵌套数组,如下所示:

    [[{...},{...}]]
Run Code Online (Sandbox Code Playgroud)

如果我使用方法 2 并像这样初始化组件状态:

    const [tableDataSource, setTableDataSource] = useState([{}])
Run Code Online (Sandbox Code Playgroud)

结果:

    [{}, [{...}, {...}]] …
Run Code Online (Sandbox Code Playgroud)

arrays object-literal reactjs use-state spread-expression

2
推荐指数
1
解决办法
3758
查看次数

如何确定对象是使用对象文字还是对象构造函数调用创建的?

更具体地说,您如何确定某个对象是否是使用文字创建的?

var s1 = new String();
var s2 = ""; // Literal

var o1 = new Object();
var o2 = {}; // Literal

var f1 = new Function();
var f2 = function(){}; // Literal
Run Code Online (Sandbox Code Playgroud)

显然,如果你比较上面的任何两个,例如:

var o1 = new Object();
var o2 = {};

alert(o1 == o2);
alert(o1 === o2);

alert(typeof o1);
alert(typeof o2);
Run Code Online (Sandbox Code Playgroud)

...前两个警报将显示,false而最后两个警报将显示[Object object]

比方说,如果我想这样做:

function isLiteral(obj, type) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

......怎么会这样做呢?

已经看了如何确定一个对象是否是Javascript中的对象文字?,但它没有回答我的问题.

javascript function-literal object-literal string-literals

1
推荐指数
1
解决办法
163
查看次数

排序对象数组

我有一个像这样的对象文字数组:

var myArr = [];

myArr[0] = {
   'score': 4,
   'name': 'foo'
}

myArr[1] = {
   'score': 1,
   'name': 'bar'
}

myArr[2] = {
   'score': 3,
   'name': 'foobar'
}
Run Code Online (Sandbox Code Playgroud)

我如何对数组进行排序,使其通过'score'参数上升,使其更改为:

myArr[0] = {
   'score': 1,
   'name': 'bar'
}

myArr[1] = {
   'score': 3,
   'name': 'foobar'
}

myArr[2] = {
   'score': 4,
   'name': 'foo'
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

javascript arrays jquery object object-literal

1
推荐指数
2
解决办法
1299
查看次数

在对象构造函数中使用对象文字表示法的好处?

我正在尝试理解JS的细节,并且看到很多对象文字的例子被传递给构造函数.这种方法有什么好处?如何创建我的对象来使用这种方法?

例如:

myTooltip = new YAHOO.widget.Tooltip("myTooltip", { 
    context: "myContextEl", 
    text: "You have hovered over myContextEl.",
    showDelay: 500
});
Run Code Online (Sandbox Code Playgroud)

假设我正在创建一个简单的类.很多简单的OO教程都提供了类似的东西

myCat = new Cat();
myCat.name = "fluffy";
myCat.friendly = true;
myCat.lives = 9
Run Code Online (Sandbox Code Playgroud)

相反

myCat = new Cat({
    name: "fluffy", 
    friendly:true,
lives: 9
})
Run Code Online (Sandbox Code Playgroud)

如何创建Cat对象以使用此方法?

javascript object-literal

1
推荐指数
1
解决办法
1328
查看次数

JavaScript数组文字定义中逗号后面的值是多少?

我一直在观看会议视频(请参阅视频中13:23的C#开发人员的良好JavaScript习惯).演示者一直在讨论JavaScript的最佳实践.他给出的一个提示是使用我熟悉的对象文字声明.

但是,在他使用的代码中,他使用对象文字表示法声明了一个数组,如下所示:

var myArray = [], name;
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这个.我习惯var myArray = []了声明的部分但是name逗号之后的第二个值是什么?演示者从不讨论它,我找不到任何其他这种做法的例子.有人可以解释这是什么吗?

javascript object-literal

1
推荐指数
1
解决办法
144
查看次数

Javascript - 如何将变量用作函数*和*对象文字

我见过人们使用变量作为对象和函数,如下所示:

myClass();
Run Code Online (Sandbox Code Playgroud)

myClass.myMethod();
Run Code Online (Sandbox Code Playgroud)

他们是怎么做到的?

javascript methods function object-literal

1
推荐指数
1
解决办法
71
查看次数

在对象内引用对象

我正在编写一个javascript对象,并防止重复同一对象的别名

例如,在此处重复相同值的键:

var colours = {
    red: {
        rgb: "255,0,0",
        hex: "#FF0000"
    },
    brickred: {
        rgb: "255,0,0",
        hex: "#FF0000"
    }
};
Run Code Online (Sandbox Code Playgroud)

我尝试引用同一个对象,而不是重复:

var colours = {
    red: {
        rgb: "255,0,0",
        hex: "#FF0000"
    },
    brickred: this.red
};
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.我意识到(我认为)这是因为它指的是窗口对象而不是颜色.那么我试过:

var colours = {
    red: {
        rgb: "255,0,0",
        hex: "#FF0000"
    },
    brickred: colours.red
};
Run Code Online (Sandbox Code Playgroud)

但这仍然不起作用,我不明白为什么.我怎么解决这个问题?

NB示例不是很好,但基本上我有一个对象文字,并希望避免重复,我有不同的键具有相同的值.我也想知道为什么它不能用于好奇心

javascript oop object-literal

1
推荐指数
1
解决办法
82
查看次数

如何评估对象文字中的键?

这是我的功能

function goldAndSilver(bin) {
    var gold = bin.gold;
    var silver = bin.silver;
    return { gold: gold, silver: silver };
}
Run Code Online (Sandbox Code Playgroud)

为什么第一个gold参考的名称和第二个gold参考时,var gold = bin.gold已在执行下遇到.线路运行后并不gold = number总是和返回应该导致{5: 5}而不是{gold: 5}

javascript object-literal

1
推荐指数
1
解决办法
107
查看次数

为什么不能对象文字调用toCtring()方法如{} .toString()导致错误?

当object literal调用toString()方法时{}.toString()会导致语法错误,但是当数组文字调用toString()时就可以了.当我将对象文字分配给变量时,那么当它调用该toString()方法时就可以了.为什么?例如:

var o = {};
o.toString();  // OK

{}.toString(); 
// > Uncaught SyntaxError: Unexpected token .
[1, 2, 3].toString(); // OK
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript object-literal

1
推荐指数
1
解决办法
459
查看次数