Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较数组并创建与数组a匹配的新数组?_Javascript_Arrays_Algorithm - Fatal编程技术网

Javascript 如何比较数组并创建与数组a匹配的新数组?

Javascript 如何比较数组并创建与数组a匹配的新数组?,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,如果数组b包含数组a的字符串值,我想匹配两个数组。我想创建一个新数组,下面的代码将其从数组b中推送所有对象。如何仅推送匹配的对象 ctrl.js var a = ["standard","industry","4578595"] var b = [{file:"server.log",value:"lorem ipsum industry standard 4578595"}, {file:"server.log",value:"lorem ipsum industry standadr"}

如果数组
b
包含数组a的字符串值,我想匹配两个数组。我想创建一个新数组,下面的代码将其从数组b中推送所有对象。如何仅推送匹配的对象

ctrl.js

 var a = ["standard","industry","4578595"]
 var b = [{file:"server.log",value:"lorem ipsum industry standard 4578595"}, {file:"server.log",value:"lorem ipsum industry standadr"},{file:"server.log",value:"lorem ipsum industry"}];
 var finalyArray = [];
 function compareArrays() {   
     for (i = 0; i < a.length; i++) {
         for (z = 0; z < a.length; z++) {
             if (a[i] === b[z]) {
                 finalArray.push(b[z]);
                 console.log(finalArray); 
             }
         }
     }
}

compareArrays();
var a=[“标准”、“行业”、“4578595”]
var b=[{文件:“server.log”,值:“lorem ipsum行业标准4578595”},{文件:“server.log”,值:“lorem ipsum行业标准”},{文件:“server.log”,值:“lorem ipsum行业标准”};
var FinalArray=[];
函数comparararays(){
对于(i=0;i
不需要使用嵌套循环和常规迭代

阵列过滤更干净,非常适合:

const a=[“标准”、“行业”、“4578595”]
const b=[{文件:“server.log”,值:“lorem ipsum行业标准4578595”},{文件:“server.log”,值:“lorem ipsum行业标准”},{文件:“server.log”,值:“lorem ipsum行业标准”};
常量匹配条件=({itemB,itemA})=>itemB.value.includes(itemA);
//筛选B中满足匹配条件的所有项目,其中至少有一个项目来自a
常量匹配=b.filter(
itemB=>a(
itemA=>matchingCondition({itemB,itemA})
)
);

console.log(匹配项)不需要使用嵌套循环和常规迭代

阵列过滤更干净,非常适合:

const a=[“标准”、“行业”、“4578595”]
const b=[{文件:“server.log”,值:“lorem ipsum行业标准4578595”},{文件:“server.log”,值:“lorem ipsum行业标准”},{文件:“server.log”,值:“lorem ipsum行业标准”};
常量匹配条件=({itemB,itemA})=>itemB.value.includes(itemA);
//筛选B中满足匹配条件的所有项目,其中至少有一个项目来自a
常量匹配=b.filter(
itemB=>a(
itemA=>matchingCondition({itemB,itemA})
)
);
console.log(匹配项)
//返回b的子集数组,其中包含数组a的所有字符串
变量a=[“标准”、“行业”、“4578595”]
变量b=[
{文件:“server.log”,值:“lorem ipsum行业标准4578595”},
{文件:“server.log”,值:“lorem ipsum行业标准”},
{文件:“server.log”,值:“lorem ipsum 4578595 industry”};
函数过滤器阵列(a,b){
var aLen=a.长度;
var bLen=b.长度;
变量过滤器阵列=[]
//如果数组为空,则应返回空数组
如果(!aLen){
回流过滤器阵列;
}
对于(变量i=0;i//返回b的子集数组,其中包含数组a的所有字符串
变量a=[“标准”、“行业”、“4578595”]
变量b=[
{文件:“server.log”,值:“lorem ipsum行业标准4578595”},
{文件:“server.log”,值:“lorem ipsum行业标准”},
{文件:“server.log”,值:“lorem ipsum 4578595 industry”};
函数过滤器阵列(a,b){
var aLen=a.长度;
var bLen=b.长度;
变量过滤器阵列=[]
//如果数组为空,则应返回空数组
如果(!aLen){
回流过滤器阵列;
}
对于(变量i=0;i
对于(var k=0;k,我认为您缺少了一个引号…这只是输入错误,结果是
a
中的sameNo项与
b
中的任何项匹配。首先,您需要定义“匹配”的内容这意味着在此上下文中,请为您的用例定义“匹配项”。如果您比较两个相同类型的数组,您的代码可以正常工作,但是您将字符串数组与对象数组进行比较,因此没有任何内容与
==
匹配。如果我读得正确,
(z=0;z
应该是
(z=0;z
,但正如其他人所说,在这个例子中没有“匹配”的内容。我认为您缺少了一个引号……这只是打字错误,结果是
a
中的相同项目与
b
中的任何项目匹配。首先,您需要定义“匹配”的内容这意味着在此上下文中,请为您的用例定义“匹配项”。如果您比较两个相同类型的数组,您的代码可以正常工作,但是您将字符串数组与对象数组进行比较,因此没有任何内容与
==
匹配。如果我读得正确,
(z=0;z
应该是
(z=0;z
,但正如其他人所说,如果我在
a
中只有一个值,例如
[“standard”]
我看到错误`a。如果你有
a=[“standard”],则有些不是函数`
,然后
a.有些
必须是函数,因为方法
有些
在它们的原型上排列(假设原型没有“以某种方式改变”)。也许你有
a=“标准”
相反?所以是一个字符串,而不是一个数组。在这种情况下,您可以跳过
some
调用,直接将
a
传递到匹配条件中。我将使用这两种情况用户输入可以有一个或多个关键字,您是否可以编辑您的答案以使其工作。工作起来很简单-您也应该付出一些努力:)感谢您的帮助!如果我在
a
中只有一个值,例如
[“standard”]
我会看到错误`a.some不是函数`a如果您有
a=[“standard”]
,那么
a.some
必须是函数,因为该方法将
some
数组放在它们的原型上(假设原型不存在)'
    // return a subset array of b, which contains all the strings of array a 

    var a = ["standard","industry","4578595"]
    var b = [
      {file:"server.log",value:"lorem ipsum industry standard 4578595"}, 
      {file:"server.log",value:"lorem ipsum industry standadr"},
      {file:"server.log",value:"lorem ipsum 4578595 industry"}];

    function filterArray(a,b) {
      var aLen = a.length;
      var bLen = b.length;
      var filterArray = []

      // if a is empty it should return empty array
      if (!aLen){
        return filterArray;
      }

      for(var i = 0; i< bLen; i++) {
        var bValuesArray = b[i].value.split(" ");
        var bValuesLength = bValuesArray.length;
        var addObject = 0;

        for(var j=0; j< aLen; j++) {
           for(var k=0; k <bValuesLength; k++ ){
              if(a[j] === bValuesArray[k]){
                addObject++;
                continue;
              }
           }
        }
        // add if all elements of a are present in b array
        if(addObject === aLen) {
          filterArray.push(b[i]);
        }
      }

      return filterArray;
    };

    console.log(filterArray(a,b));