克隆JavaScript对象的最有效方法是什么?我已经看到obj = eval(uneval(o));被使用,但这是非标准的,只有Firefox支持.
我做过类似的事情,obj = JSON.parse(JSON.stringify(o));但质疑效率.
我也看到了具有各种缺陷的递归复制功能.
我很惊讶没有规范的解决方案.
可能重复:
克隆JavaScript对象的最有效方法是什么?
我需要复制一个(有序的,非关联的)对象数组.我正在使用jQuery.我最初尝试过
jquery.extend({}, myArray)
Run Code Online (Sandbox Code Playgroud)
但是,当然,这给了我一个对象,我需要一个数组(顺便说一句,真的很喜欢jquery.extend).
那么,复制数组的最佳方法是什么?
我有一个输入的对象数组.让我们来称呼它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中最好地执行循环检测和避免.也就是说,没有程序化的方法来检查一个物体是否来自"这个"参考,是吗?
这是代码.谢谢!
setAttrs: function(config) {
var go = Kinetic.GlobalObject;
var that = this;
// set properties from config
if(config !== undefined) {
function setAttrs(obj, c) {
for(var key in c) {
var val = c[key];
/*
* if property is an object, then add an empty object
* to the node and then traverse
*/
if(go._isObject(val) && !go._isArray(val) && !go._isElement(val)) {
if(obj[key] === undefined) {
obj[key] = {};
}
setAttrs(obj[key], val); // <--- offending code;
// one of my …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用回溯法制作数独求解器,但遇到了问题。每当我更改网格数组的副本时,原始数组也会更改。
有人能帮助我吗?
算法:
let grid = [
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, …Run Code Online (Sandbox Code Playgroud) 我正在实施John Conway生命游戏,但我遇到了一个奇怪的问题.如果代码给我带来麻烦,这是一个简短的版本:
let lifeMap = [
[true, false, false],
[false, false, false],
[false, false, false]
];
let oldLifeMap = lifeMap.slice();
for (let row = 0; row < lifeMap.length; row++) {
for (let val = 0; val < lifeMap[row].length; val++) {
let bool = lifeMap[row][val];
let newBool = false; // here is where I would determine if cell is alive/dead
lifeMap[row][val] = newBool;
if (row === 0 && val === 0) console.log("at (0,0)", oldLifeMap[0][0]);
}
}
Run Code Online (Sandbox Code Playgroud)
为了响应此代码,JavaScript打印at (0,0) false.我需要它一直 …
javascript arrays copy multidimensional-array conways-game-of-life
javascript ×6
arrays ×2
angular ×1
clone ×1
copy ×1
deep-copy ×1
jquery ×1
kineticjs ×1
object ×1
typescript ×1