相关疑难解决方法(0)

如何使用另一个数组扩展现有JavaScript数组,而无需创建新数组

似乎没有办法用另一个数组扩展现有的JavaScript数组,即模拟Python的extend方法.

我想实现以下目标:

>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
>>> a
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

我知道有一种a.concat(b)方法,但它创建了一个新的数组,而不是简单地扩展第一个.我想要一种算法,当a它明显大于b(即不复制的算法)时,它可以有效地工作a.

注意:不是如何将某些内容附加到数组的副本 - 这里的目标是将一个数组的全部内容添加到另一个数组中,并"就地"执行,即不复制扩展数组的所有元素.

javascript arrays concatenation

899
推荐指数
11
解决办法
51万
查看次数

递归循环遍历对象以构建属性列表

情况:我有一个包含多个子和子子对象的大对象,其属性包含多种数据类型.出于我们的目的,此对象看起来像这样:

var object = {
    aProperty: {
        aSetting1: 1,
        aSetting2: 2,
        aSetting3: 3,
        aSetting4: 4,
        aSetting5: 5
    },
    bProperty: {
        bSetting1: {
            bPropertySubSetting : true
        },
        bSetting2: "bString"
    },
    cProperty: {
        cSetting: "cString"
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要循环遍历此对象并构建显示层次结构的键列表,因此列表最终看起来像这样:

aProperty.aSetting1
aProperty.aSetting2
aProperty.aSetting3
aProperty.aSetting4
aProperty.aSetting5
bProperty.bSetting1.bPropertySubSetting
bProperty.bSetting2
cProperty.cSetting
Run Code Online (Sandbox Code Playgroud)

我有这个函数,它循环遍历对象并吐出密钥,但不是分层次的:

function iterate(obj) {
    for (var property in obj) {
        if (obj.hasOwnProperty(property)) {
            if (typeof obj[property] == "object") {
                iterate(obj[property]);
            }
            else {
                console.log(property + "   " + obj[property]);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能告诉我怎么做吗?这里有一个jsfiddle让你搞砸:http: …

javascript object

50
推荐指数
5
解决办法
7万
查看次数

为什么JavaScript navigator.appName会为Safari,Firefox和Chrome返回Netscape?

为什么navigator.appName返回Safari,Firefox和Chrome的"Netscape"?

他们与旧浏览器Netscape有什么关系?可能是因为DOM0?

html javascript browser firefox dom

45
推荐指数
2
解决办法
3万
查看次数

使用lodash通过属性名称提取深层嵌套的子对象

我有深层嵌套对象的数组.我想编写一个函数来从这些数组中提取任意子对象.在某些情况下,嵌套属性的值是值和对象,在其他情况下,它们是数组.

数组的示例如下:

[{parent: {level1: {level2: 'data'}}}]

[{parent: {level1: [{level2: {...}}, {level2: {...}}, {level2: {...}}]}}]

[{parent: {level1: [{level2: {level3: 'data'}}, {level2: {..}}, {level2: {..}}]}}]
Run Code Online (Sandbox Code Playgroud)

在这样的数组上调用提取函数应该会产生一个我们感兴趣的对象数组.

调用上面示例数组的函数及其结果的示例:

extractChildren(source, 'level2') = [{level2: 'data'}]

extractChildren(source, 'level2') = [{level2: {...}, level2: {...}, level2: {...}]

extractChildren(source, 'level3') = [{level3: 'data'}]
Run Code Online (Sandbox Code Playgroud)

是否有一种简洁的方法来实现这一点,lodash或者我应该使用常规JavaScript来迭代属性?

PS认为它等同于XPath select all nodes with the name "nodename"

javascript lodash

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

常规推送和Array.prototype.push.apply之间有什么区别

我不太明白以下两行代码之间的区别.在我的代码中,带有"apply"的行按照我想要的方式工作,而只有常规push的行不会.

那么当这两个都被执行时真正发生了什么

//this one does not work the way i want it to
$scope.items.push(result.data.stuff)

//this one works!
Array.prototype.push.apply($scope.items, result.data.stuff);
Run Code Online (Sandbox Code Playgroud)

编辑:抱歉混淆,我修复它,以便它有"推"方法

javascript apply javascript-objects

8
推荐指数
4
解决办法
8740
查看次数