我试图通过迭代输入来从表单中的多个输入字段收集值,然后将它们作为键/值对存储在对象数组中。然而,我正在努力寻找一种有效的方法来执行此操作,该方法不涉及长集 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 元素属性(可能是 …
我的组件有一个应该存储对象数组的状态。我把它初始化为空。
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) 更具体地说,您如何确定某个对象是否是使用文字创建的?
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中的对象文字?,但它没有回答我的问题.
我有一个像这样的对象文字数组:
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)
提前致谢.
我正在尝试理解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对象以使用此方法?
我一直在观看会议视频(请参阅视频中13:23的C#开发人员的良好JavaScript习惯).演示者一直在讨论JavaScript的最佳实践.他给出的一个提示是使用我熟悉的对象文字声明.
但是,在他使用的代码中,他使用对象文字表示法声明了一个数组,如下所示:
var myArray = [], name;
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这个.我习惯var myArray = []了声明的部分但是name逗号之后的第二个值是什么?演示者从不讨论它,我找不到任何其他这种做法的例子.有人可以解释这是什么吗?
我见过人们使用变量作为对象和函数,如下所示:
myClass();
Run Code Online (Sandbox Code Playgroud)
和
myClass.myMethod();
Run Code Online (Sandbox Code Playgroud)
他们是怎么做到的?
我正在编写一个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示例不是很好,但基本上我有一个对象文字,并希望避免重复,我有不同的键具有相同的值.我也想知道为什么它不能用于好奇心
这是我的功能
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}?
当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)
谢谢!