Javascript 有条件地将字符串数组和数字数组组合为对象数组
我有两个数组,一个是字符串类型,第二个是数字。如何有条件地将这些对象组合为键值对象 例如:Javascript 有条件地将字符串数组和数字数组组合为对象数组,javascript,arrays,react-native,lodash,Javascript,Arrays,React Native,Lodash,我有两个数组,一个是字符串类型,第二个是数字。如何有条件地将这些对象组合为键值对象 例如: var fruits = [ "Apple", "Banana" , "Apricot", "Bilberry" ] var count = [3,5,0,2] var merge = [{"Apple":3},{"Banana" :5},{"Bilberry":2}] var merge = _.zipObject(["Apple","Banana" ,"Apricot","Bil
var fruits = [
"Apple",
"Banana" ,
"Apricot",
"Bilberry"
]
var count = [3,5,0,2]
var merge = [{"Apple":3},{"Banana" :5},{"Bilberry":2}]
var merge = _.zipObject(["Apple","Banana" ,"Apricot","Bilberry"], [3,5,0,2])
我想将水果
和计数
数组组合为键值对象和哪个计数不0
期望值:
var fruits = [
"Apple",
"Banana" ,
"Apricot",
"Bilberry"
]
var count = [3,5,0,2]
var merge = [{"Apple":3},{"Banana" :5},{"Bilberry":2}]
var merge = _.zipObject(["Apple","Banana" ,"Apricot","Bilberry"], [3,5,0,2])
我尝试的是:
var fruits = [
"Apple",
"Banana" ,
"Apricot",
"Bilberry"
]
var count = [3,5,0,2]
var merge = [{"Apple":3},{"Banana" :5},{"Bilberry":2}]
var merge = _.zipObject(["Apple","Banana" ,"Apricot","Bilberry"], [3,5,0,2])
结果是:
{"Apple":3,"Banana":5 ,"Apricot":0,"Bilberry":2}
使用
filter
、Object.values
和map
var output = count.map((s, i) => ({
[fruits[i]]: s
})).filter(s => Object.values(s)[0]);
演示
var=[
“苹果”,
“香蕉”,
“杏”,
“越橘”
];
变量计数=[3,5,0,2];
var输出=count.map((s,i)=>({
[水果[i]]:s
})).filter=>Object.values[0]);
控制台日志(输出)
使用过滤器
,对象值
和映射
var output = count.map((s, i) => ({
[fruits[i]]: s
})).filter(s => Object.values(s)[0]);
演示
var=[
“苹果”,
“香蕉”,
“杏”,
“越橘”
];
变量计数=[3,5,0,2];
var输出=count.map((s,i)=>({
[水果[i]]:s
})).filter=>Object.values[0]);
控制台日志(输出)代码>使用.zipObject()
创建对象,然后使用筛选值为0的键
注意:\u.pickBy()
接受回调。默认值是identity,它将过滤所有falsy值(false、0、null、undefined等)。如果只想过滤零,请提供另一个回调,例如(v)=>v!==0
var水果=[“苹果”、“香蕉”、“杏”、“越橘”];
var计数=[3,5,0,2];
var结果=u.pickBy(u.zipObject(水果,计数));
控制台日志(结果)代码>
使用.zipObject()
创建对象,然后使用筛选值为0的键
注意:\u.pickBy()
接受回调。默认值是identity,它将过滤所有falsy值(false、0、null、undefined等)。如果只想过滤零,请提供另一个回调,例如(v)=>v!==0
var水果=[“苹果”、“香蕉”、“杏”、“越橘”];
var计数=[3,5,0,2];
var结果=u.pickBy(u.zipObject(水果,计数));
控制台日志(结果)代码>
您可以使用映射
创建新的对象数组&过滤器
删除未定义的对象
undefined
的来源是当计数为0时回调函数未返回任何值
var=[
“苹果”,
“香蕉”,
“杏”,
“越橘”
]
变量计数=[3,5,0,2]
var newArr=count.map(函数(项、索引){
如果(项目!==0){
返回{
[水果[索引]]:项目
}
}
}).过滤器(功能(项目){
退货项目!==未定义;
})
console.log(newArr)
您可以使用映射
创建新的对象数组&过滤器
删除未定义的
undefined
的来源是当计数为0时回调函数未返回任何值
var=[
“苹果”,
“香蕉”,
“杏”,
“越橘”
]
变量计数=[3,5,0,2]
var newArr=count.map(函数(项、索引){
如果(项目!==0){
返回{
[水果[索引]]:项目
}
}
}).过滤器(功能(项目){
退货项目!==未定义;
})
console.log(newArr)
我认为您正在寻找的两个实用程序函数是:
zip
,从[a,b]+[1,2]>[a,1],[b,2]]
fromPair
从[a,1]->{a:1}
通过在这两个步骤中拆分转换,可以过滤键值对列表,从而确保不会丢失索引链接的跟踪:
const valueFilter = ([k, v]) => v !== 0;
这些功能的可能实现包括:
const zip = (xs, ...others) =>
xs.map(
(x, i) => [x].concat(others.map(ys => ys[i]))
);
const fromPair = ([k, v]) => ({ [k]: v });
使用这些实用程序,您可以执行以下操作:
//Utils
常量zip=(xs,…其他)=>
xs.map(
(x,i)=>[x].concat(others.map(ys=>ys[i]))
);
常量fromPair=([k,v])=>({[k]:v});
//资料
康斯特水果=[“苹果”、“香蕉”、“杏”、“越橘”];
常数计数=[3,5,0,2];
//应用程序
常数valueNotZero=([k,v])=>v!==0;
console.log(
拉链(水果、计数)
.过滤器(值不为零)
.map(fromPair)
)
我认为您正在寻找的两个实用功能是:
zip
,从[a,b]+[1,2]>[a,1],[b,2]]
fromPair
从[a,1]->{a:1}
通过在这两个步骤中拆分转换,可以过滤键值对列表,从而确保不会丢失索引链接的跟踪:
const valueFilter = ([k, v]) => v !== 0;
这些功能的可能实现包括:
const zip = (xs, ...others) =>
xs.map(
(x, i) => [x].concat(others.map(ys => ys[i]))
);
const fromPair = ([k, v]) => ({ [k]: v });
使用这些实用程序,您可以执行以下操作:
//Utils
常量zip=(xs,…其他)=>
xs.map(
(x,i)=>[x].concat(others.map(ys=>ys[i]))
);
常量fromPair=([k,v])=>({[k]:v});
//资料
康斯特水果=[“苹果”、“香蕉”、“杏”、“越橘”];
常数计数=[3,5,0,2];
//应用程序
常数valueNotZero=([k,v])=>v!==0;
console.log(
拉链(水果、计数)
.过滤器(值不为零)
.map(fromPair)
)
使用简单的forEach
var=[
“苹果”,
“香蕉”,
“杏”,
“越橘”
]
变量计数=[3,5,0,2];
var合并=[];
水果。forEach((val,i)=>{
if(count[i]){merge.push({[val]:count[i]});
});
console.log(合并)代码>与简单的forEach
var=[
“苹果”,
“香蕉”,
“杏”,
“越橘”
]
变量计数=[3,5,0,2];
var合并=[];
水果。forEach((val,i)=>{
if(count[i]){merge.push({[val]:count[i]});
});
console.log(合并)代码>为什么不循环thorugh并自己做呢。我不认为有任何现成的功能this@Abhishek,是的,可以通过循环来完成,但这会让人感到疲劳:)库也会做同样的事情。为什么不自己去做呢。我不瘦