如何创建一个数组的克隆而不是引用?

5
代码(一个简单的替换循环):
fs.readFile(filename, 'utf8', function(err, data) {
  if (err) throw err

  data = data.split('\n\n')
  var tree = data

  for (var i = 0; i < tree.length; ++i) {
    if (tree[i].match(/^#/g)) {
      data[i] = data[i]
        .replace(/^#### (.*)/gm, '<h4>$1</h4>')
        .replace(/^### (.*)/gm, '<h3>$1</h3>')
        .replace(/^## (.*)/gm, '<h2>$1</h2>')
        .replace(/^# (.*)/gm, '<h1>$1</h1>')
    }
  }

  data = data.join('\n\n')
  tree = tree.join('\n\n')

  console.log(data)
  console.log(tree)

因此,在这种情况下,datatree都具有相同的输出:

<h1>Test</h1>

<h2>Test</h2>

Lorem "**ipsum?**" dolor 'sit!' amet

Anooo

* * *

"Ipsum?" "'**dolor**'" *sit!* amet, consetetur
eirmod tempor--invidunt **ut** labore

Anothes

我想要做的是保留treedata的原始值,使得只有data改变而tree不会改变。

该如何实现?

tree应该保持不变,像这样:

# Test

## Test

Lorem "**ipsum?**" dolor 'sit!' amet

Anooo

* * *

"Ipsum?" "'**dolor**'" *sit!* amet, consetetur
eirmod tempor--invidunt **ut** labore

Anothes
3个回答

5
使用Array.prototype.slice()slice()方法将现有数组中的一部分浅复制到一个新的数组对象中。 var tree = data.slice();

3

使用一个技巧

var tree = data.slice(0)

这段代码可能会被封装成一个单独的函数或方法。


data.slice() 可以像 Rodrigo Assis 的回答中那样使用(无需参数)。 - phts

2

Jquery

var newObj = obj.extend({}, obj)

AngularJS

var newObj = angular.copy(obj)

纯JavaScript

JSON.parse(JSON.stringify(obj));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接