微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从函数调用时,数组未按预期返回

如何解决从函数调用时,数组未按预期返回

我正在尝试遍历嵌套在数组中的嵌套对象数组。
我似乎没有好的回报价值。
抱歉,我是新来的,所以这是我的第一个问题,我希望我的措辞符合您的理解,但我有代码可以显示任何方式。
如果我 console.log(newObjsForShoes) 它按预期工作但如果我返回它不会,而且如果我将它推入一个数组它只返回一个值。
代码如下

function generateLaceDetails(inventory) {

    var arrOfInventory = [];
    var objInInventory = {};
    var arrOfLaceWords = [];
    var newObjsForShoes = {};
    for (var i = 0; i < inventory.length; i++) {
        for (var keys in inventory[i]) {
            if (Array.isArray(inventory[i][keys]) === true) {

                for (var j = 0; j < inventory[i][keys].length; j++) {
                    if (inventory[i][keys][j].name.includes('lace')) {
                        newObjsForShoes['nameWords'] = inventory[i][keys][j].name;

                        newObjsForShoes['nameWords'] = splitToArray(newObjsForShoes);

                        for (var index = 0; index < newObjsForShoes['nameWords'].length; index++) {
                            if (newObjsForShoes['nameWords'][index].includes('lace')) {
                                newObjsForShoes['targetWordindex'] = index;

                                console.log(newObjsForShoes);
                                arrOfInventory.push(newObjsForShoes)
                                return arrOfInventory;
                            }
                        }
                    }
                }
            }
        }
    }
    // return arrOfInventory;
}

// var array = [];
// array.push(generateLaceDetails(currentInventory))
// console.log(array);

function splitToArray(objs) {
    var arrayOfSplitWords = [];
    for (var key in objs) {
        var splitWords = objs[key].split(" ");
        return splitWords;
    }

}

function assertEquals(actual,expected,testName) {
    actual = JSON.stringify(actual);
    expected = JSON.stringify(expected);
    if (actual === expected) {
        console.log('passed')
    } else {
        console.log('Failed [' + testName + '] Expected ' + expected + ',but got ' + actual)
    }
}

var currentInventory = [
    {
        name: 'Brunello Cucinelli',shoes: [{
                name: 'tasselled black low-top lace-up',price: 1000
            },{
                name: 'tasselled green low-top lace-up',price: 1100
            },{
                name: 'plain beige suede moccasin',price: 950
            },{
                name: 'plain olive suede moccasin',price: 1050
            }
        ]
    },{
        name: 'Gucci',shoes: [{
                name: 'red leather laced sneakers',price: 800
            },{
                name: 'black leather laced sneakers',price: 900
            }
        ]
    }
];
var expectedResult = [{
        "nameWords": [
            "tasselled","black","low-top","lace-up"
        ],"targetWordindex": 3
    },{
        "nameWords": [
            "tasselled","green",{
        "nameWords": [
            "red","leather","laced","sneakers"
        ],"targetWordindex": 2
    },{
        "nameWords": [
            "black","targetWordindex": 2
    }
];

var actualObj = generateLaceDetails(currentInventory);

assertEquals(actualObj,expectedResult,"generate lace details")

解决方法

我觉得你这个问题真的让你的生活变得复杂

const currentInventory = 
  [ { name: 'Brunello Cucinelli',shoes: 
      [ { name: 'tasselled black low-top lace-up',price: 1000},{ name: 'tasselled green low-top lace-up',price: 1100},{ name: 'plain beige suede moccasin',price: 950},{ name: 'plain olive suede moccasin',price: 1050} 
      ] 
    },{ name: 'Gucci',shoes: 
      [ { name: 'red leather laced sneakers',price: 800},{ name: 'black leather laced sneakers',price: 900} 
  ] } ] 
  
  
function genLaceDetails(inv)
  {
  let res = []
  for (let invEl of inv)
  for (let keyEL in invEl)  
  if (Array.isArray(invEl[keyEL]))
  for (let row of invEl[keyEL])
  if (row.name.includes('lace'))
    {
    let nameWords       = row.name.split(' '),targetWordIndex = nameWords.findIndex(x=>x.includes('lace'))
    res.push({nameWords,targetWordIndex})
    }
  return res
  }

const result = genLaceDetails( currentInventory )

console.log( result )
.as-console-wrapper {max-height: 100%!important;top:0}

,

使用 map() 和 filter() 方法返回

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。