我想循环遍历数组中包含的对象并更改每个对象的属性.如果我这样做:
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j]);
}
Run Code Online (Sandbox Code Playgroud)
控制台应该调出阵列中的每个对象,对吧?但实际上它只显示第一个对象.如果我控制台将数组记录在循环外部,那么所有对象都会出现,所以肯定会有更多.
无论如何,这是下一个问题.如何使用循环访问数组中的Object1.x?
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j.x]);
}
Run Code Online (Sandbox Code Playgroud)
这将返回"未定义".循环外的控制台日志再次告诉我,对象都具有"x"的值.如何在循环中访问这些属性?
我被推荐到其他地方为每个属性使用单独的数组,但我想确保我已经用尽了这个大道.
谢谢!
在Python的性能方面,是一个列表理解,还是比for循环更快的map(),filter()和reduce()等函数?从技术上讲,为什么它们"以C速度运行",而"for循环以python虚拟机速度运行"?
假设在我正在开发的游戏中,我需要使用for循环绘制复杂且巨大的地图.这个问题肯定是相关的,因为如果列表理解确实更快,那么为了避免滞后(尽管代码的视觉复杂性),这将是一个更好的选择.
我正在使用这个JavaScript迭代一个数组并找到一个匹配的数组元素:
var remSize = [],
szString, remData, remIndex, i;
for (i = 0; i < remSize.length; i++) {
// I'm looking for the index i, when the condition is true
remSize[i].size == remData.size ? remIndex = i : remIndex = -1;
}
Run Code Online (Sandbox Code Playgroud)
该数组包含这些"大小":["34", "36", "38"...].
remData.size 是我正在寻找的"大小"(例如"36").
i如果我正在搜索的大小在索引中,我需要返回索引.否则我需要回来-1.有一个更好的方法吗?
我一直想知道它们之间有什么区别.他们似乎都在做同样的事情......
为什么默认情况下对象不可迭代?
我一直看到与迭代对象有关的问题,常见的解决方案是迭代对象的属性并以这种方式访问对象中的值.这似乎很常见,它让我想知道为什么对象本身不可迭代.
for...of默认情况下,像ES6 这样的语句很适合用于对象.因为这些功能仅适用于不包含{}对象的特殊"可迭代对象" ,所以我们必须通过箍来使这个对我们想要使用它的对象起作用.
for ... of语句创建一个循环迭代可迭代对象 (包括Array,Map,Set,arguments对象等)......
例如,使用ES6 生成器功能:
var example = {a: {e: 'one', f: 'two'}, b: {g: 'three'}, c: {h: 'four', i: 'five'}};
function* entries(obj) {
for (let key of Object.keys(obj)) {
yield [key, obj[key]];
}
}
for (let [key, value] of entries(example)) {
console.log(key);
console.log(value);
for (let [key, value] of entries(value)) {
console.log(key);
console.log(value);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在Firefox(支持ES6)中运行代码时,上面按照我期望的顺序正确记录数据:

默认情况下,{}对象不可迭代,但为什么?缺点是否超过了可迭代对象的潜在好处?与此相关的问题是什么?
此外,由于{}对象是从"阵列状"集合和"可迭代的对象",如不同NodeList,HtmlCollection以及arguments …
我总是假设在JavaScript中缓存数组的长度是一个好主意(特别是在for循环的条件下),因为计算数组的长度是昂贵的.
for (var i = 0; i < arr.length; i++) { }
// vs
for (var i = 0, arrLength = arr.length; i < arrLength; i++) { }
Run Code Online (Sandbox Code Playgroud)
但是,我想也许该length属性只是在创建和更改数组时更新.因此,阅读它不应该是一个操作太昂贵而不是读取存储在变量中的操作(与其他语言中可能需要在内存中寻找某些内容的其他方法相反,例如strlen()在C中).
我有两个问题.我也对它是如何工作感兴趣,所以请不要用过早的优化棒打我.
假设浏览器中的JavaScript引擎.
length在JavaScript中缓存数组的属性有什么好处吗?是否有更多的参与在对象的属性上读取局部变量?length属性是否仅在创建和on上更改,shift()并且pop()类型方法不返回新数组,否则只是存储为整数?我在JavaScript中创建了一个对象数组.如何在浏览器窗口中打印对象数组,类似于print_rPHP中的功能?
var lineChartData = [{
date: new Date(2009, 10, 2),
value: 5
}, {
date: new Date(2009, 10, 25),
value: 30
}, {
date: new Date(2009, 10, 26),
value: 72,
customBullet: "images/redstar.png"
}];
Run Code Online (Sandbox Code Playgroud) ES6是否为对象属性引入了明确定义的枚举顺序?
var o = {
'1': 1,
'a': 2,
'b': 3
}
Object.keys(o); // ["1", "a", "b"] - is this ordering guaranteed by ES6?
for(let k in o) {
console.log(k);
} // 1 2 3 - is this ordering guaranteed by ES6?
Run Code Online (Sandbox Code Playgroud) 我有以下JS对象,我需要将parseFloat应用于任何数字值字段(以便ngTable正确排序).
我正在通过Object循环执行此操作.我已经尝试过嵌套的angular.forEach但是我遇到了范围问题(内部循环没有看到外部变量).
接近这个的最佳方式是什么?
编辑:应该提到对象名称(即:Person,PersonDetails)是动态的.:/
我的目标:
{
"data": [
{
"Person": {
"id" : "1",
"age": "23",
"days": "5",
"first_name": "Joe",
"last_name": "Smith",
},
"PersonDetails": {
"id": "4",
"name": "Cousin",
"oldest: "2",
}
},
{
"Person": {
"id" : "2",
"age": "18",
"days": "3",
"first_name": "John",
"last_name": "Doe",
},
"PersonDetails": {
"id": "4",
"name": "Second Cousin",
"oldest: "3",
}
}
...
...
]
};
Run Code Online (Sandbox Code Playgroud) 我是一名PHP开发人员,我一直认为微优化不值得花时间.如果你真的需要额外的性能,你可以编写你的软件,使其在架构上更快,或者你编写一个C++扩展来处理慢速任务(或者更好的是,使用HipHop编译代码).然而,今天一位工作伙伴告诉我,这有很大的不同
is_array($array)
Run Code Online (Sandbox Code Playgroud)
和
$array === (array) $array
Run Code Online (Sandbox Code Playgroud)
而且我就像"呃,这真是一个毫无意义的比较",但他不同意我的看法......他是我们公司最好的开发人员,并且负责一个每天大约有5000万次SQL查询的网站 - - 例如.所以,我在这里想知道:他可能是错的还是微优化真的值得花时间和时间?
javascript ×8
arrays ×4
ecmascript-6 ×2
for-loop ×2
map-function ×2
performance ×2
angularjs ×1
ecmascript-5 ×1
foreach ×1
iteration ×1
iterator ×1
object ×1
optimization ×1
php ×1
python ×1