Lo-Dash

如何在JavaScript中初始化数组的长度?

社会主义新天地 提交于 2020-02-26 02:36:00
我阅读过的有关JavaScript数组的大多数教程(包括 w3schools 和 devguru )都建议您可以通过使用 var test = new Array(4); 将整数传递给Array构造函数来初始化具有一定长度的数组 var test = new Array(4); 句法。 在我的js文件中自由使用此语法后,我通过 jsLint 运行了其中一个文件,结果很 糟糕 : 错误:第1行第22个字符处出现问题:预期为“)”,而是看到了“ 4”。 var test = new Array(4); 第1行第23个字元的问题:预期为';' 而是看到')'。 var test = new Array(4); 第1行第23个字符处的问题:需要一个标识符,而看到了')'。 阅读完 jsLint对其行为的解释之后 ,看起来jsLint并不真正喜欢 new Array() 语法,而是在声明数组时更喜欢 [] 。 所以我有几个问题。 首先,为什么? 通过使用 new Array() 语法是否会冒任何风险? 我应该注意浏览器的不兼容性吗? 其次,如果我切换到方括号语法,是否有任何方法可以声明一个数组并将其长度全部设置在一行上,或者我必须执行以下操作: var test = []; test.length = 4; #1楼 如上所述,使用 new Array(size) 有点危险。 而不是直接使用它

使用变量动态访问对象属性

时光总嘲笑我的痴心妄想 提交于 2019-12-26 22:20:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我正在尝试使用动态名称访问对象的属性。 这可能吗? const something = { bar: "Foobar!" }; const foo = 'bar'; something.foo; // The idea is to access something.bar, getting "Foobar!" #1楼 在javascript中,我们可以使用: 点表示法 foo.bar 方括号 foo[someVar] 或 foo["string"] 但是只有第二种情况允许动态访问属性: var foo = { pName1 : 1, pName2 : [1, {foo : bar }, 3] , ...} var name = "pName" var num = 1; foo[name + num]; // 1 // -- var a = 2; var b = 1; var c = "foo"; foo[name + a][b][c]; // bar #2楼 更新 我考虑了以下意见并表示同意。 避免评估。 使用 obj[variable] 可以轻松实现访问对象的根属性,但是嵌套会使事情复杂化。 不要写已经写好的代码,我建议使用 lodash.get 。 例 // Accessing root property

如何获取JavaScript中两个数组之间的差异?

╄→尐↘猪︶ㄣ 提交于 2019-12-26 18:34:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 有没有办法返回JavaScript中两个数组之间的差? 例如: var a1 = ['a', 'b']; var a2 = ['a', 'b', 'c', 'd']; // need ["c", "d"] #1楼 littlebit修复最佳答案 function arr_diff(a1, a2) { var a=[], diff=[]; for(var i=0;i<a1.length;i++) a[a1[i]]=a1[i]; for(var i=0;i<a2.length;i++) if(a[a2[i]]) delete a[a2[i]]; else a[a2[i]]=a2[i]; for(var k in a) diff.push(a[k]); return diff; } 这将考虑当前元素的类型。 b / c当我们制作a [a1 [i]]时,它将其原始值转换为字符串值,因此我们丢失了实际值。 #2楼 对于小数组,使用 indexOf() 解决方案是可以的,但是随着它们的长度增加,算法的性能将接近 O(n^2) 。 这是一个解决方案,通过将对象用作关联数组以将数组项存储为键,将对大型数组有更好的性能。 它还自动消除重复项,但仅适用于字符串值(或可以安全存储为字符串的值): function arrayDiff

JavaScript是否具有类似“ range()”的方法来在提供的范围内生成范围?

坚强是说给别人听的谎言 提交于 2019-12-21 17:23:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在PHP中,您可以... range(1, 3); // Array(1, 2, 3) range("A", "C"); // Array("A", "B", "C") 也就是说,有一个函数可以让您通过传递上下限来获得一定范围的数字或字符。 为此,JavaScript是否内置任何内置功能? 如果没有,我将如何实施? #1楼 号码 [...Array(5).keys()]; => [0, 1, 2, 3, 4] 角色迭代 String.fromCharCode(...[...Array('D'.charCodeAt(0) - 'A'.charCodeAt(0) + 1).keys()].map(i => i + 'A'.charCodeAt(0))); => "ABCD" 迭代 for (const x of Array(5).keys()) { console.log(x, String.fromCharCode('A'.charCodeAt(0) + x)); } => 0,"A" 1,"B" 2,"C" 3,"D" 4,"E" 作为功​​能 function range(size, startAt = 0) { return [...Array(size).keys()].map(i => i +

如何检查对象在JavaScript中是否具有特定属性?

﹥>﹥吖頭↗ 提交于 2019-12-09 11:32:32
如何检查对象在JavaScript中是否具有特定属性? 考虑: x = {'key': 1}; if ( x.hasOwnProperty('key') ) { //Do this } 那是最好的方法吗? #1楼 随着 Underscore.js 或( 甚至更好 ) lodash : _.has(x, 'key'); 该方法调用 Object.prototype.hasOwnProperty ,但(a)的类型较短,并且(b)使用“对 hasOwnProperty 的安全引用”(即,即使 hasOwnProperty 被覆盖也可以使用)。 特别是lodash将 _.has 定义为: function has(object, key) { return object ? hasOwnProperty.call(object, key) : false; } // hasOwnProperty = Object.prototype.hasOwnProperty #2楼 是的,它是:)我想您也可以执行 Object.prototype.hasOwnProperty.call(x, 'key') ,如果 x 具有一个名为 hasOwnProperty 的属性,它也应该可以工作:) 但这会测试自己的属性。 如果要检查它是否具有也可以继承的属性,可以使用 typeof x.foo !=

如何检查对象在JavaScript中是否具有特定属性?

烂漫一生 提交于 2019-12-08 16:47:51
如何检查对象在JavaScript中是否具有特定属性? 考虑: x = {'key': 1}; if ( x.hasOwnProperty('key') ) { //Do this } 那是最好的方法吗? #1楼 随着 Underscore.js 或( 甚至更好 ) lodash : _.has(x, 'key'); 该方法调用 Object.prototype.hasOwnProperty ,但(a)的类型较短,并且(b)使用“对 hasOwnProperty 的安全引用”(即,即使 hasOwnProperty 被覆盖也可以使用)。 特别是lodash将 _.has 定义为: function has(object, key) { return object ? hasOwnProperty.call(object, key) : false; } // hasOwnProperty = Object.prototype.hasOwnProperty #2楼 是的,它是:)我想您也可以执行 Object.prototype.hasOwnProperty.call(x, 'key') ,如果 x 具有一个名为 hasOwnProperty 的属性,它也应该可以工作:) 但这会测试自己的属性。 如果要检查它是否具有也可以继承的属性,可以使用 typeof x.foo !=