Javascript 获取obj.map以更改所有值

Javascript 获取obj.map以更改所有值,javascript,Javascript,我的vm.countryList数组如下所示: var vm = { countryList: [{ id: "gb", name: "Great Britain", ticked: true }, { id: "us", name: "United States", ticked: true }] }; vm.countryList.map(obj => Object

我的vm.countryList数组如下所示:

var vm = {
    countryList: [{
        id: "gb",
        name: "Great Britain",
        ticked: true
    }, {
        id: "us",
        name: "United States",
        ticked: true
    }]
};
vm.countryList.map(obj => Object.assign({}, obj, { ticked: false }))
我想要的是将所有勾选的值设置为false。 我可以用地图吗

vm.countryList = vm.countryList.map(ticked=false);

这一个不起作用,但它是有可能的,或者我需要foreach或for(I=…)

您可以通过
map
实现这一点,并且仍然是一个线性函数,具有:


一个观察结果是,您需要将一个函数传递给
map
(该函数应用于数组中的每个项,生成一个新数组),这就是代码无效的原因。

您可以通过
map
实现这一点,并且仍然是一个线性函数,具有:


观察到的一点是,您需要将函数传递给
map
(该函数应用于数组中的每个项,生成一个新数组),这就是代码无效的原因。

您可以使用
运算符将
布尔值
切换为

const obj=[{id:“gb”,name:“大不列颠”,勾选:true}
,{id:“美国”,姓名:“美国”,勾选:true}];
设res=obj.map(o=>(o.ticked=!o.ticked,o));

控制台日志(res)您可以使用
运算符将
布尔值
切换为

const obj=[{id:“gb”,name:“大不列颠”,勾选:true}
,{id:“美国”,姓名:“美国”,勾选:true}];
设res=obj.map(o=>(o.ticked=!o.ticked,o));

控制台日志(res)
如果您只想更改原始对象,那么在
forEach()
上使用
map()
确实没有意义,因为这将是
map()
迭代的副作用

您可以使用
map()
创建一个包含新对象的新数组,并对
勾选的属性进行所需的修改,而不是像这样修改原始数组和对象:

var vm = {
    countryList: [{
        id: "gb",
        name: "Great Britain",
        ticked: true
    }, {
        id: "us",
        name: "United States",
        ticked: true
    }]
};
vm.countryList.map(obj => Object.assign({}, obj, { ticked: false }))

如果您只想更改原始对象,那么在
forEach()
上使用
map()
确实没有意义,因为这将是
map()
迭代的副作用

您可以使用
map()
创建一个包含新对象的新数组,并对
勾选的属性进行所需的修改,而不是像这样修改原始数组和对象:

var vm = {
    countryList: [{
        id: "gb",
        name: "Great Britain",
        ticked: true
    }, {
        id: "us",
        name: "United States",
        ticked: true
    }]
};
vm.countryList.map(obj => Object.assign({}, obj, { ticked: false }))

但是我可以看到您正在用

vm.countryList = vm.countryList.map(ticked=false);
因此,更新当前数组而不是创建一个新数组并将其分配给相同的数组以覆盖,不是更好吗?因此,这样做更容易、更快:

vm.countryList.forEach(country=>country.ticked=false)

但是我可以看到您正在用

vm.countryList = vm.countryList.map(ticked=false);
因此,更新当前数组而不是创建一个新数组并将其分配给相同的数组以覆盖,不是更好吗?因此,这样做更容易、更快:

vm.countryList.forEach(country=>country.ticked=false)

你能发布更多的代码吗?Joey你还需要什么?我只想将数组中所有勾选的值设置为false。你想更新现有数组还是想要一个新数组?你能发布更多的代码吗?Joey,你还需要什么?我只想将数组中所有勾选的值都设置为false。是要更新现有数组还是要新数组?阿尔贝托,效果非常好!!让我看看我是否能站起来。将当前的
countryList
对象指定给
country
,然后。。。呃。。好的,我知道你最后在哪里设置了值,但是
assign({},country,
)-这部分我不知道。首先,你需要了解地图。在地图中,你迭代列表,每次迭代,我们将当前项分配给
country
对象。assign
是获取
country
并“合并”这将使用
{ticket:true}
,公共属性(在本例中,只有
ticket
)被后者覆盖,并且此合并的结果将添加到第一个参数(空对象)并返回。这是一种仅通过更改属性(在本例中,为ticket)生成对象新版本的方法感谢Alberto,这是一个非常强大和灵活的解决方案。即使它有点复杂:-D谢谢!哈哈,是的,它很复杂,但你很快就会习惯。Object.assign({},{a:1,b:1},{b:2,c:3})返回{a:1,b:2,c:3},例如。我们在这里合并了这两个对象,以及公共属性(在本例中为b)具有第二个对象的值。这确实是一种创建新对象的强大方法。Alberto工作得很好!!让我看看我是否没有接受。你将当前的
countryList
对象分配给
country
,然后你…嗯..好的,我知道你最后在哪里设置了值,但是
assign({},country,
-这部分我不知道。首先,你需要了解地图。在地图中,你迭代列表,每次迭代,我们将当前项目分配给
国家
对象。分配
是获取
国家
,并将其与
{ticket:true}
合并,并具有公共属性(在本例中,只有
ticket
)被后者覆盖,此合并的结果被添加到第一个参数(空对象)并返回。这是一种仅通过更改属性(在本例中,为ticket)生成对象新版本的方法感谢Alberto,这是一个非常强大和灵活的解决方案。即使它有点复杂:-D谢谢!哈哈,是的,它很复杂,但你很快就会习惯。Object.assign({},{a:1,b:1},{b:2,c:3})返回{a:1,b:2,c:3},例如。我们在这里合并了这两个对象,以及公共属性(在本例中为b)具有第二个对象的价值。这确实是一种创建新对象的强大方式。我知道的那个:-)但在这种情况下,我只是希望它们都是假的。(在其他情况下,用其他东西更改其他值)Albertos解决方案工作得很好,即使你的值更高simple@torbenrudgaard “在其他情况下,使用其他内容更改其他值”不会出现在原始问题中。请使用符合要求的方法进行此操作?
vm.currencyList=vm.currencyList.map(o=>(o.tick