Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 加入数组时发生异常';钥匙_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 加入数组时发生异常';钥匙

Javascript 加入数组时发生异常';钥匙,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我想破例。我很难解释,所以让我告诉你我的意思 我的代码: fruits = [ {name: "apple", energy: 100, not: "kiwi"}, {name: "kiwi", energy: 126, not: "orange"}, {name: "banana", energy: 150, not: ""}, {name: "orange", energy: 118, not: "peach"}, {name: "

我想破例。我很难解释,所以让我告诉你我的意思

我的代码:

fruits = [ 
  {name: "apple",     energy: 100, not: "kiwi"}, 
  {name: "kiwi",      energy: 126, not: "orange"}, 
  {name: "banana",    energy: 150, not: ""}, 
  {name: "orange",    energy: 118, not: "peach"}, 
  {name: "pineapple", energy: 98,  not: ""}, 
  {name: "coconut",   energy: 83,  not: ""}, 
  {name: "peach",     energy: 65,  not: ""}, 
  {name: "lemon",     energy: 36,  not: ""} 
] 

const pick = (arr, n) => {
  const r = [];
  for (var i = 0; i < arr.length; i += n) {
    const slice = arr.slice(i, i+n);
    const name = slice.map(({name}) => name).join('-')
    const energy = slice.reduce((r, {energy}) => r + energy, 0);
    r.push({name, energy})
  }
  return r;
}

const result = pick(fruits, 2)
console.log(result)
我要做的是做一个例外(
not
in
fruits
)。所以苹果不应该和猕猴桃、猕猴桃和橘子等联系起来,它应该是这样的

{name: "apple-banana",   energy: something},
{name: "kiwi-pineapple", energy: something},
...
我想我可以过滤
切片
,检查它的任何项目是否包含
而不是
,但我失败了:(
有人能帮我吗?

您需要获取一个名称数组和一个异常数组,并在交叉点检查它们:

fruits=[
{名称:“苹果”,能量:100,不是“猕猴桃”},
{名称:“猕猴桃”,能量:126,不是“橙色”},
{名称:“香蕉”,能量:150,不是:},
{名称:“橙色”,能量:118,不是“桃子”},
{名称:“菠萝”,能量:98,不是:},
{名称:“椰子”,能量:83,不是:},
{名称:“桃”,能量:65,不是:},
{名称:“柠檬”,能量:36,不是:}
] 
函数相交(a1,a2){
var isIntersect=false
a1.forEach(功能(a){
如果(a.length>0&&a2.indexOf(a)!=-1)isIntersect=true
})
返回isIntersect
}
常数选取=(arr,n)=>{
常数r=[];
对于(变量i=0;iname)
const notsArr=slice.map(({not})=>not)
如果(!intersect(namesArr,notsArr)){
const name=namesArr.join('-'))
const energy=slice.reduce((r,{energy})=>r+energy,0);
r、 推送({name,energy})
}
}
返回r;
}
常量结果=拾取(水果,2)

console.log(result)
实际上,您需要对数组进行
筛选
以选择属性值不等于迭代的
名称的元素:

const pick = (arr, n) => {
  const r = [];
  for (var i = 0; i < arr.length; i += n) {
    var slice = [];
    slice.push(arr[i]);
    slice = slice.concat(arr.filter(function(x, ind) {
      return x.name !== arr[i].name && x.not !== arr[i].name
    }));
    slice = slice.slice(0, n);
    var name = slice.reduce((r, {
      name
    }) => r + name + "-", "");
    name = name.replace(/\-$/, '');
    const energy = slice.reduce((r, {
      energy
    }) => r + energy, 0);
    r.push({
      name,
      energy
    });
  }
  return r;
}
const pick=(arr,n)=>{
常数r=[];
对于(变量i=0;ir+名称+“-”,”);
名称=名称。替换(/\-$/,“”);
常数能量=切片减少((r{
能量
})=>r+能量,0);
r、 推({
名称
能量
});
}
返回r;
}
演示:

var=[{
名称:“苹果”,
能源:100,
不是:“猕猴桃”
},
{
名称:“猕猴桃”,
能源:126,
不是:“橙色”
},
{
名称:“香蕉”,
能源:150,
不是:“
},
{
名称:“橙色”,
能源:118,
不是:“桃子”
},
{
名称:“菠萝”,
能源:98,
不是:“
},
{
名称:“椰子”,
能源:83,
不是:“
},
{
名字:“桃子”,
能源:65,
不是:“
},
{
名称:“柠檬”,
能源:36,
不是:“
}
]
常数选取=(arr,n)=>{
常数r=[];
对于(变量i=0;ir+名称+“-”,”);
名称=名称。替换(/\-$/,“”);
常数能量=切片减少((r{
能量
})=>r+能量,0);
r、 推({
名称
能量
});
}
返回r;
}
常量结果=拾取(水果,2)

console.log(result)
Array.some更适合这种操作(intersect)
const pick = (arr, n) => {
  const r = [];
  for (var i = 0; i < arr.length; i += n) {
    var slice = [];
    slice.push(arr[i]);
    slice = slice.concat(arr.filter(function(x, ind) {
      return x.name !== arr[i].name && x.not !== arr[i].name
    }));
    slice = slice.slice(0, n);
    var name = slice.reduce((r, {
      name
    }) => r + name + "-", "");
    name = name.replace(/\-$/, '');
    const energy = slice.reduce((r, {
      energy
    }) => r + energy, 0);
    r.push({
      name,
      energy
    });
  }
  return r;
}