展平数组并查找相应的值并写入新数组

时间:2017-09-23 20:43:47

标签: javascript ecmascript-6 lodash

目前,我遍历一组linkedObjects来搜索isMatch。此测试查看是否在数组obj.resource_ids中存在element.id,如果是,则我们将匹配的appointmentObj中的printable-string添加到printStr中的数组。

问题来了,因为value.resource_uniqueids可能是一个包含许多id的数组,但我的测试只找到一个。

不知何故,我需要匹配value.resource_uniqueids中的所有ID。 - 可能是我需要为每个value.resource_uniqueids添加一个新的appointmentObj,然后连接每个等效的printable-string

我希望这是有道理的。如何为value.resource_uniqueids的每个匹配添加新的$ {currentMatch.printable-string}

谢谢!

_.forEach(appointmentObj, (value,i) => {

    // value.resource_uniqueids is always an array, most of the time it only has one element
    // but sometimes it can have more than one which means we only match one below in isMatch function

    _.set(appointmentObj[i], 'resource_ids', value.resource_uniqueids ); 
    _.set(appointmentObj[i], 'printable-string', `${value.title}, ${moment(value.created_at).format( 'Do MMMM YYYY')}` );
});    

linkedObjects.forEach((element, index) => {

    let isMatch = appointmentObj.find((obj) => {
        return _.includes(obj.resource_ids,element.id);
    });

    if(isMatch) {
        linkedObjects[index]['content']['printstring'] = `${currentMatch.printable-string}`;
    }
});

1 个答案:

答案 0 :(得分:1)

  

问题来了,因为value.resource_uniqueids可能是一个数组   包含许多ID但我的测试只找到一个。

Array.prototype.find()返回数组中的单个匹配元素。如果预期结果是迭代数组中的多个匹配结果,请使用Array.prototype.filter()