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));