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,是的,可以通过循环来完成,但这会让人感到疲劳:)库也会做同样的事情。为什么不自己去做呢。我不瘦