是否可以在 Javascript 和 Vue 中搜索另一个数组时修改一个数组的值?
Posted
技术标签:
【中文标题】是否可以在 Javascript 和 Vue 中搜索另一个数组时修改一个数组的值?【英文标题】:Is it possible to modify the value of one array while searching through another in Javascript and Vue? 【发布时间】:2019-03-16 21:41:17 【问题描述】:如果我有两个都包含对象的数组。如果某些项目匹配,是否可以在循环另一个数组时修改一个数组的项目值?比如名字?
目前,我正在循环第一个数组,显示名称,旁边有复选框(全部选中)。 如果我取消选中该复选框,请将名称相同的两个数组设置为 visible: false
我也在使用 Vue,如果这能让事情变得更容易的话
说;
array 1 = [Name: John, Age: 19, Visible: false, Name: Frank, Age: 20, Visible: true, Name: Kate, Age: 20, Visible: true]
array 2 = [Name: John, Age: 30, Visible: true, Name: William, Age: 20, Visible: true, Name: Henry, Age: 40, Visible: true]
是否可以将其设置在 如果两个名称匹配,则将两者都设置为可见 false。在此示例中,它将是“John”。所以第一个数组中的“John”是visible: true
,所以我希望两者都是visible: false
【问题讨论】:
你能分享一个尝试过的例子或你的模板 当然。它很大,填充图表等。我需要一些时间来简化它 【参考方案1】:如果效率不是您的首要任务,您可以使用嵌套循环并将 Visible 设置为 false,只要在两个数组中都找到 Name:
var array1 = [Name: 'John', Age: 19, Visible: false, Name: 'Frank', Age: 20, Visible: true, Name: 'Kate', Age: 20, Visible: true]
var array2 = [Name: 'John', Age: 30, Visible: true, Name: 'William', Age: 20, Visible: true, Name: 'Henry', Age: 40, Visible: true]
array1.forEach(obj1 =>
array2.forEach(obj2 =>
if (obj1.Name === obj2.Name)
obj1.Visible = false
obj2.Visible = false
)
)
console.log(array1, array2)
【讨论】:
一个很好的答案。很好很简单,是的,对于我目前的工作,这会很好用。谢谢!只是出于好奇,如果有三个数组,它会如何工作? 天真的方法是嵌入另一个嵌套循环array1.forEach(obj1 => array2.forEach(obj2 => array3.forEach(obj3 => if (obj1.Name === obj2.Name && obj1.Name === obj3.Name) obj1.Visible = false; obj2.Visible = false; obj3.Visible = false; ) ) )
【参考方案2】:
如果只有两个数组,我认为您可以使用循环和 if 条件来执行此操作(理想情况下,您应该使用函数的 break out)。如果您有多个对象可以与名称匹配,请不要使用 break,否则,它会更有效,因此您不会循环遍历您知道不匹配的值。代码应如下所示:
function someUnCheckFunction(uncheckedNameValue)
arrayOne.forEach(function(item, index)
if(item.Name == uncheckedNameValue)
item.Visible = false;
break; // this will stop the loop. If you have multiple objects with the same Name, remove it
);
arrayTwo.forEach(function(item, index)
if(item.Name == uncheckedNameValue)
item.Visible = false;
break; // this will stop the loop. If you have multiple objects with the same Name, remove it
);
function someCheckFunction(checkedNameValue)
arrayOne.forEach(function(item, index)
if(item.Name == uncheckedNameValue)
item.Visible = true;
break; // this will stop the loop. If you have multiple objects with the same Name, remove it
);
arrayTwo.forEach(function(item, index)
if(item.Name == uncheckedNameValue)
item.Visible = true;
break; // this will stop the loop. If you have multiple objects with the same Name, remove it
);
【讨论】:
感谢您的详细解答!以上是关于是否可以在 Javascript 和 Vue 中搜索另一个数组时修改一个数组的值?的主要内容,如果未能解决你的问题,请参考以下文章