相关疑难解决方法(0)

如何通过引用将JavaScript对象复制到新变量?

在这里编写了一个快速的jsfiddle ,我将一个小的json对象传递给一个新的变量并修改原始变量(而不是新变量)的数据,但新变量的数据也会更新.这必须意味着json对象是通过引用传递的,对吧?

这是我的快速代码:

var json_original = {one:'one', two:'two'}

var json_new = json_original;

console.log(json_original); //one, two
console.log(json_new); //one, two

json_original.one = 'two';
json_original.two = 'one';

console.log(json_original); //two, one
console.log(json_new); //two, one
Run Code Online (Sandbox Code Playgroud)

有没有办法制作json对象的深层副本,以便修改原始变量不会修改新变量?

javascript object javascript-objects

167
推荐指数
2
解决办法
18万
查看次数

如何使用javascript Object.defineProperty

我四处寻找如何使用该Object.defineProperty方法,但找不到任何体面的东西.

有人给了我这段代码:

Object.defineProperty(player, "health", {
    get: function () {
        return 10 + ( player.level * 15 );
    }
})
Run Code Online (Sandbox Code Playgroud)

但我不明白.主要get是,我不能得到(双关语).它是如何工作的?

javascript object defineproperty

167
推荐指数
3
解决办法
9万
查看次数

打字稿 - 克隆对象

我有一个超类是父(Entity)对于很多子类(Customer,Product,ProductCategory...)

我正在寻找动态克隆在Typescript中包含不同子对象的对象.

例如:a Customer有不同的Product人有ProductCategory

var cust:Customer  = new Customer ();

cust.name = "someName";
cust.products.push(new Product(someId1));
cust.products.push(new Product(someId2));
Run Code Online (Sandbox Code Playgroud)

为了克隆整个对象树,我创建了一个函数 Entity

public clone():any {
    var cloneObj = new this.constructor();
    for (var attribut in this) {
        if(typeof this[attribut] === "object"){
           cloneObj[attribut] = this.clone();
        } else {
           cloneObj[attribut] = this[attribut];
        }
    }
    return cloneObj;
}
Run Code Online (Sandbox Code Playgroud)

new上升时,它被transpiled为JavaScript以下错误:error TS2351: Cannot use 'new' with an expression whose type lacks a call or …

javascript typescript

131
推荐指数
11
解决办法
22万
查看次数

了解Node.js模块:multiple需要返回相同的对象吗?

我有一个关于模块缓存的node.js文档的问题:

模块在第一次加载后进行缓存.这意味着(除其他外)每次调用require('foo')将获得 完全相同的返回对象,如果它将解析为同一个文件.

多次调用require('foo')可能不会导致模块代码多次执行.这是一个重要的特征.有了它,就可以返回"部分完成"的对象,从而允许加载传递依赖,即使它们会导致循环.

是什么意思may

我想知道require是否总是返回相同的对象.所以,如果我需要一个模块一个app.js,改变出口中的对象app.js(需要回报的),之后需要一个模块app.js本身需要模块一个,我将永远得到该对象的修改版本或新一?

// app.js

var a = require('./a');
a.b = 2;
console.log(a.b); //2

var b = require('./b');
console.log(b.b); //2

// a.js

exports.a = 1;

// b.js

module.exports = require('./a');
Run Code Online (Sandbox Code Playgroud)

node.js

99
推荐指数
2
解决办法
4万
查看次数

使用扩展语法在ES6中进行深层复制

我正在尝试为我的Redux项目创建一个深度复制映射方法,该方法将使用对象而不是数组.我读到在Redux中,每个州都不应该改变以前的状态.

export const mapCopy = (object, callback) => {
    return Object.keys(object).reduce(function (output, key) {

    output[key] = callback.call(this, {...object[key]});

    return output;
    }, {});
}
Run Code Online (Sandbox Code Playgroud)

有用:

    return mapCopy(state, e => {

            if (e.id === action.id) {
                 e.title = 'new item';
            }

            return e;
        })
Run Code Online (Sandbox Code Playgroud)

但是它没有深层复制内部项目所以我需要调整它:

export const mapCopy = (object, callback) => {
    return Object.keys(object).reduce(function (output, key) {

    let newObject = {...object[key]};
    newObject.style = {...newObject.style};
    newObject.data = {...newObject.data};

    output[key] = callback.call(this, newObject);

    return output;
    }, {});
}
Run Code Online (Sandbox Code Playgroud)

这不太优雅,因为它需要知道传递了哪些对象.ES6中是否有一种方法可以使用扩展语法来深度复制对象?

javascript ecmascript-6 spread-syntax redux

79
推荐指数
6
解决办法
8万
查看次数

将变量的值复制到另一个变量中

我有一个变量,它有一个JSON对象作为其值.我直接将此变量分配给其他变量,以便它们共享相同的值.这是它的工作原理:

var a = $('#some_hidden_var').val(),
    b = a;
Run Code Online (Sandbox Code Playgroud)

这有效,两者都有相同的价值.我使用mousemove事件处理程序来更新b我的应用程序.单击按钮,我想恢复b原始值,即存储的值a.

$('#revert').on('click', function(e){
    b = a;
});
Run Code Online (Sandbox Code Playgroud)

在此之后,如果我使用相同的mousemove事件处理程序,它会同时更新两者,a并且b在更早时它仅b按预期更新.

我很难过这个问题!这有什么不对?

javascript jquery

78
推荐指数
6
解决办法
17万
查看次数

在Vue.js 2中将道具作为初始数据传递的正确方法是什么?

所以我想将道具传递给Vue组件,但我希望这些道具将来会从该组件内部改变,例如当我使用AJAX从内部更新该Vue组件时.所以它们只用于组件的初始化.

我的cars-listVue组件元素,我将具有初始属性的props传递给single-car:

// cars-list.vue

<script>
    export default {
        data: function() {
            return {
                cars: [
                    {
                        color: 'red',
                        maxSpeed: 200,
                    },
                    {
                        color: 'blue',
                        maxSpeed: 195,
                    },
                ]
            }
        },
    }
</script>

<template>
    <div>
        <template v-for="car in cars">
            <single-car :initial-properties="car"></single-car>
        </template>
    </div>
</template>
Run Code Online (Sandbox Code Playgroud)

我现在这样做的方式是在我的single-car组件里面我分配 this.initialProperties给我this.data.propertiescreated()初始化钩子.它起作用并且具有反应性.

// single-car.vue

<script>
    export default {
        data: function() {
            return {
                properties: {},
            }
        },
        created: function(){
            this.data.properties = this.initialProperties;
        },
    }
</script>

<template> …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js

74
推荐指数
4
解决办法
5万
查看次数

如何克隆javascript ES6类实例

如何使用ES6克隆Javascript类实例.

我对基于jquery或$ extend的解决方案不感兴趣.

我已经看到对对象克隆的相当古老的讨论表明这个问题非常复杂,但是使用ES6可以得到一个非常简单的解决方案 - 我会把它放在下面,看看人们是否认为它是令人满意的.

编辑:建议我的问题是重复的; 我看到了这个答案,但它已经有7年的历史,并且使用前ES6 js涉及非常复杂的答案.我建议我的问题,允许ES6,有一个非常简单的解决方案.

javascript node.js ecmascript-6 es6-class

70
推荐指数
4
解决办法
2万
查看次数

将对象存储在React组件的状态中?

是否可以将对象存储在React组件的状态中?如果是,那么我们如何使用setState?更改该对象中键的值?我认为在语法上不允许写下这样的东西:

this.setState({ abc.xyz: 'new value' });
Run Code Online (Sandbox Code Playgroud)

在类似的方面,我还有另一个问题:在React组件中有一组变量是否可以在组件的任何方法中使用它们,而不是将它们存储在一个状态中?

您可以创建一个包含所有这些变量的简单对象,并将其放置在组件级别,就像在组件上声明任何方法一样.

它很可能遇到这样的情况,即在代码中包含大量业务逻辑,并且需要使用许多变量,这些变量的值由多个方法更改,然后根据这些值更改组件的状态.

因此,您只需保留那些值应直接反映在UI中的变量,而不是将所有这些变量保留在状态中.

如果这种方法比我在这里写的第一个问题更好,那么我不需要在状态中存储一个对象.

javascript reactjs

66
推荐指数
6
解决办法
8万
查看次数

在Angular 2 + TypeScript中深层复制数组

我有一个输入的对象数组.让我们来称呼它content.

尝试深度复制时,它仍然具有对前一个数组的引用.

我需要复制该输入数组,并更改重复部分的一个属性.

很久以来我尝试了不成功的不同方法.

ES6方式:

public duplicateArray() {
  arr = [...this.content]
  arr.map((x) => {x.status = DEFAULT});
  return this.content.concat(arr);
}
Run Code Online (Sandbox Code Playgroud)

slice方式:

public duplicateArray() {
  arr = this.content.slice(0);
  arr.map((x) => {x.status = DEFAULT});
  return this.content.concat(arr);
}
Run Code Online (Sandbox Code Playgroud)

在这两个数组中,所有对象都有status: 'Default'.

在Angular 2中深度复制数组的最佳方法是什么?

javascript typescript angular

63
推荐指数
7
解决办法
9万
查看次数