相关疑难解决方法(0)

如何在JavaScript中深层复制自定义对象?

我一直在这里冲浪一段时间,仍然没有找到适合我的答案.

有没有办法在JS中深层复制非普通对象?

我已经尝试了,jQuery.extend(true, {}, this)但它只克隆了一些,剩下的仍然是另一个对象的参考.

javascript clone object

11
推荐指数
2
解决办法
1万
查看次数

如何克隆道具对象并使其无反应

我有一些表单数据,我通过道具与子组件共享。现在我想克隆 prop 对象并使其无反应。就我而言,我希望用户能够在不实际更改克隆值的情况下修改 props 值。克隆值应该只用于向用户显示编辑时表单的内容。下面的代码显示了这一点:

    <template>
        <div>
            <div v-if="computedFormData">
                original prop title: {{orgData.title}}

                new title:
                <input type="text" v-model="formData.title"/> 
                //changing data here will also change orgData.title
            </div>

        </div>
    </template>

    <script>
        export default {
            props: ['formData'],
            data() {
                return {
                    orgData: [],
                }
            },
            computed: {
                computedFormData: function () {
                    this.orgData = this.formData;
                    return this.orgData;
                },
            },
            methods: {
            },
        }
    </script>
Run Code Online (Sandbox Code Playgroud)

我试过Object.freeze(testData);但它不起作用,testData 和 orgData 都是反应性的。另请注意,使用mountedcreated属性不会呈现 orgData,因此我被迫使用该computed属性。

vue.js

11
推荐指数
2
解决办法
7912
查看次数

在JavaScript中克隆对象

考虑下面的代码或检查这个小提琴.

var obj = {
    name: "abc",
    age: 20
}

var objTwo;

console.log(obj.age);
objTwo = obj;
objTwo.age = 10;
console.log(obj.age);
Run Code Online (Sandbox Code Playgroud)

我创建了一个名为obj的对象,它有两个属性.现在我将obj分配给另一个名为objTwo的对象.现在我更新objTwo中的一个属性.同样的变化也反映在obj上.如何在不创建引用的情况下将值从一个对象分配给另一个对象?

javascript clone object

10
推荐指数
1
解决办法
890
查看次数

javascript中的递归原型继承?

Object.create = function (o) {
    function F() {}
    F.prototype = o;
    return new F();
};
Run Code Online (Sandbox Code Playgroud)

来自JavaScript中的Prototypal继承

我一直在使用这段代码来创建从以前的代码继承的新对象.但是我遇到了一点意外.

a = {
    foo: [1,2,3]
}

b = Object.create(a);
// b.foo -> [1,2,3]
b.foo = "test";
// b.foo -> "test"
// a.foo -> [1,2,3]

c = Object.create(a);
// c.foo -> [1,2,3]
c.foo[0] = 'test';
// c.foo -> ["test",2,3]
// a.foo -> ["test",2,3]
Run Code Online (Sandbox Code Playgroud)

在尝试改变时,c.foo我改变了a.foo,c.foo显示了改变,因为它继承了a.我现在看到的唯一解决方案是仅修改以下的直接属性b:

d = Object.create(a);
d.foo = Object.create(a.foo);
d.foo[0] = 'text'; …
Run Code Online (Sandbox Code Playgroud)

javascript inheritance prototypal-inheritance

9
推荐指数
1
解决办法
1184
查看次数

为什么jQuery Extend Deep Copy不能递归复制对象?

我到处搜索并发现类似的问题,答案并没有真正解决我的问题,所以我道歉,如果这似乎是重复,但从我的实验中看来,jQuery的深拷贝功能实际上并没有像它描述的那样工作(或也许我误读了它的描述).

这是一个展示我遇到的问题的例子:http: //jsfiddle.net/wcYsH/

或者这个下载:https: //github.com/kevroy314/jQuery-Extend-Test

为什么在操作深层副本时,前一个副本中的数据会发生变化?

javascript jquery deep-copy extend javascript-objects

9
推荐指数
1
解决办法
2596
查看次数

如何在Javascript中解冻/解冻冻结对象?

你能告诉我如何在Javascript中解冻一个冻结的对象,以便我能够修改它的属性吗?

var pizza = {
    name: 'Peri Peri',
    Topping: 'Prawn'
};

Object.freeze(pizza);

// Can't change the name of the object because it's frozen
pizza.name = 'Hawaiian';
Run Code Online (Sandbox Code Playgroud)

javascript object

9
推荐指数
1
解决办法
4412
查看次数

JSON.parse(JSON.stringify(x))目的?

当我正在开发一个项目时,我遇到了这段代码:

var params = JSON.parse(JSON.stringify(defaultParams));
Run Code Online (Sandbox Code Playgroud)

这段代码实际上做了什么吗?

javascript json

9
推荐指数
1
解决办法
2943
查看次数

React中的Deepcopy

在减速器中,我们总是Object.assign({},state,newState)用来保存状态.但是assign()不支持deepcopy,因为这种方法只复制多级对象的引用.这是我在程序中的代码.

const menuListState={
	menuList: {},
	menuListLoading:false
}
function getMenuList(state=menuListState,action=defaultAction){
	switch(action.type){
		//menuList begin
		case actions.GET_MENULIST_SUCCESS:
		    return Object.assign({},state,{
			    menuList:action.data,
			    menuListLoading:false
		    });

		default:
			return state;
	}
}
Run Code Online (Sandbox Code Playgroud)

该属性menuList是一个多级对象.而当action.data改变时,会state.menuList在方法assign()工作之前立即改变吗?

javascript reactjs redux

9
推荐指数
2
解决办法
1万
查看次数

RoundRobin功能方法 - 为什么我的功能有副作用?

目的

我试图以纯粹的功能方式创建循环算法(https://en.wikipedia.org/wiki/Round-robin_scheduling).

该函数应该接收如下数组:

[
    [ 1, 2 ],
    [ 3, 4 ]
]
Run Code Online (Sandbox Code Playgroud)

并产生以下输出:

[ 1, 3, 2, 4 ]

为实现这一目标,我决定以递归方式实现循环,如下所示:

const roundRobin = (arr, results) => {
    if (arr.length === 0) return results;

    const newResults = arr.reduce((acc, current) => {

        if (current.length > 0) {
            acc.results.push(current.shift());
            acc.arr.push(current);
        }
        return acc;

    }, { arr: [], results });

    return roundRobin(newResults.arr, newResults.results);
};
Run Code Online (Sandbox Code Playgroud)

在这里,我感觉到一系列结果,当我没有任何东西可以添加时,我就完成了.可以使用以下代码:

const array =     [
        [ 1, 2 ],
        [ 3, 4 ]
    ];

const result …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming

9
推荐指数
1
解决办法
1099
查看次数

使用Hooks在React中更新数组

我试图弄清楚React Hook API的工作方式。我正在尝试将数字添加到列表中。我评论的代码,即myArray.push ...似乎没有执行该操作,尽管它下面的代码可以正常工作。为什么会这样呢?

import React, {useState} from 'react'

export default () => {

  const [myArray, setArray] = useState([1,2,3])

  return (
    <div>
      {myArray.map((item=>{

        return <li>{item}</li>

      }))}
      <button onClick = {()=>{

        // myArray.push(myArray[myArray.length-1]+1)
        // setArray(myArray)

        setArray([...myArray, myArray[myArray.length-1]+1])

      }}>Add</button>
    </div>
  )
}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-hooks

9
推荐指数
2
解决办法
9914
查看次数