是否可以在 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 中搜索另一个数组时修改一个数组的值?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Javascript 和 Vue 中搜索另一个数组时修改一个数组的值?

如何在URL中搜索具有特定类别的项目

Android - 在联系人列表中搜索特定电话号码

在所有表中搜索具有给定值或名称的字段[重复]

在所有表中搜索具有给定值或名称的字段[重复]

查询以在 db 列中搜索特定值