我被告知不要for...in在JavaScript中使用数组.为什么不?
在官方 Vue.js 文档中, v-for 指令的所有示例都具有以下格式:
\nv-for="thing in collection"\nRun Code Online (Sandbox Code Playgroud)\n其中collection包括数组和对象。此外,文档指出:
\n\n您还可以使用
\nof代替 作为分隔符in,这样它更接近迭代器的 JavaScript\xe2\x80\x99s 语法。
这个答案解释了普通 JavaScript 中循环for..in和循环之间的区别。for..of据我了解,for..in用于循环对象的属性和for..of用于循环可迭代的元素。
我的问题是, Vue 中的of和in与普通 JavaScript 中的含义相同吗?
我在研究 For/in 和 For/of 循环时遇到术语 Iterable 和 Enumerable。对象应该是可枚举的,我们必须使用 For/in 循环来循环对象的属性,并使用 For/of 来循环数组和字符串。我无法理解这两个术语。这两者有什么区别?
我刚刚发现,在Firefox SDK JavaScript(在MDN上),使用了我从未见过的关键字:
var tabs = require('sdk/tabs');
for (let tab of tabs)
console.log(tab.title);
Run Code Online (Sandbox Code Playgroud)
在of关键字由由Mozilla抑或是标准化?
在javascript中for..in和each..in语句有什么区别?是否存在我不知道的细微差别,或者它是否相同,每个浏览器都有不同的名称?
我正在使用Google Chrome进行此测试:与直觉相反,第一个循环警告"字符串"3次,而第二个循环警告"数字"3次.
numarray = [1, 2, 3];
//for-each loop
for(num in numarray)
alert(typeof(num));
//standard loop
for(i=0; i<numarray.length; i++)
alert(typeof(numarray[i]));
Run Code Online (Sandbox Code Playgroud)
我期待两个循环警告"数字"3次.如何在Javascript中实现第一个循环?换句话说,如果for-each是语法糖,使用标准循环的等价物是什么?
另外,有没有办法使用标准循环迭代对象的命名空间?我希望使用第二种循环来触摸某些对象的方法和属性中的每一个.我是Javascript的新手,非常感谢任何帮助,谢谢.
当我调用我自己使用 node.js 开发的 api 时,连接 postgres (Sequelize) 数据库,它返回以下 JSON:
[
{
"id": 1,
"name": "Wallet Name",
"wallet_type": "MN",
"icon": "fa fa-bank",
"color": "#000000",
"credit_limit": 3000,
"due_day": 22
}
]
Run Code Online (Sandbox Code Playgroud)
我只需要,它在每个对象上再返回一行(account_value),该信息位于另一个 javascript 函数中,因此它应该如下所示:
[
{
"id": 1,
"name": "Wallet Name",
"wallet_type": "MN",
"icon": "fa fa-bank",
"color": "#000000",
"credit_limit": 3000,
"account_value": 1200.55,
"due_day": 22
}
]
Run Code Online (Sandbox Code Playgroud)
我目前的代码是:
[
{
"id": 1,
"name": "Wallet Name",
"wallet_type": "MN",
"icon": "fa fa-bank",
"color": "#000000",
"credit_limit": 3000,
"due_day": 22
}
]
Run Code Online (Sandbox Code Playgroud)
但是,当它返回一个空数组时:
[]
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
我不知道如何修复它(我可以更改我所有的代码)
非常感谢!
我正在构建模拟宁静的API,以更好地学习。我正在使用MongoDB和node.js,为了进行测试,我使用了邮递员。
我有一个发送更新请求的路由器router.patch。在我的数据库中,我有name(字符串),price(数字)和imageProduct(字符串-我保存图像的路径)。
我可以使用 邮递员上的原始格式来更新我name和price对象,但是我不能使用form-data来更新它。据我了解,在raw-form中,我使用数组格式更新数据。有没有办法在表单数据中做到这一点?使用form-data的目的是要上传新图像,因为我可以更新的路径,但不能上传新图像公用文件夹。我该如何处理?productImage
以原始格式更新数据的示例
[ {"propName": "name"}, {"value": "test"}]
Run Code Online (Sandbox Code Playgroud)
路由器补丁
router.patch('/:productId', checkAuth, (req, res, next) => {
const id = req.params.productId;
const updateOps = {};
for (const ops of req.body) {
updateOps[ops.propName] = ops.value;
}
Product.updateMany({_id: id}, {$set: updateOps})
.exec()
.then(result => {
res.status(200).json({
message: 'Product Updated',
request: {
type: 'GET',
url: 'http://localhost:3000/products/' + id
} …Run Code Online (Sandbox Code Playgroud) 如何遍历JavaScript中的固定(开发时间)值列表?
在Perl中,我会这样做:
for my $item ('foo', 'bar', 'baz') {
Run Code Online (Sandbox Code Playgroud)
这将运行带环foo,bar并且baz在$item(每个循环运行)。
JavaScript可以做到:
for (item in new Array('foo', 'bar', 'baz')) {
Run Code Online (Sandbox Code Playgroud)
但这将item包含0,1和2,而不是值。
复制并粘贴每个项目的源是一种选择,但就维护而言是非常糟糕的选择。
另一种选择是
var items = new Array('foo', 'bar', 'baz');
for (i in items) {
var item = items[i];
Run Code Online (Sandbox Code Playgroud)
但这也是不好的代码,因为它定义了一个结构(数组),并且不需要很多开销。
javascript ×8
for-loop ×3
foreach ×3
node.js ×3
for-in-loop ×2
loops ×2
api ×1
arrays ×1
asynchronous ×1
ecmascript-6 ×1
enumerable ×1
enumeration ×1
for-of-loop ×1
iterable ×1
iteration ×1
mongodb ×1
postman ×1
rest ×1
sequelize.js ×1
typeof ×1
vue.js ×1